/* * C Program sorts the numbers in ascending order using insertion sort (insertion_sort.c) */ /* #include #define MAXSIZE 1000 void insertion_sort(int list[], int size) { int temp, i, j; for (i = 1; i < size; i++) { temp = list[i]; j = i - 1; // check left part while (temp < list[j] && j >= 0) { // find position for putting temp list[j + 1] = list[j]; // shift elements of left part to right j = j - 1; // the first list[j + 1] is saved in temp } list[j + 1] = temp; // insert temp in j + 1 } } int main() { int array[MAXSIZE]; int i, num; printf("enter the number of elements n = "); scanf("%d", &num); printf("enter %d elements one by one\n", num); for (i = 0; i < num; i++) { scanf("%d", &array[i]); } printf("\nthe original array is "); for (i = 0; i < num; i++) { printf("%d ", array[i]); } printf("\n"); insertion_sort(array, num); printf("the sorted array is "); for (i = 0; i < num; i++) { printf("%d ", array[i]); } printf("\n"); return 0; } */ .text insertion_sort: addi sp,sp,-48 sw s0,44(sp) addi s0,sp,48 sw a0,-36(s0) sw a1,-40(s0) li a5,1 sw a5,-20(s0) j .L2 .L6: lw a5,-20(s0) slli a5,a5,2 lw a4,-36(s0) add a5,a4,a5 lw a5,0(a5) sw a5,-28(s0) lw a5,-20(s0) addi a5,a5,-1 sw a5,-24(s0) j .L3 .L5: lw a5,-24(s0) slli a5,a5,2 lw a4,-36(s0) add a4,a4,a5 lw a5,-24(s0) addi a5,a5,1 slli a5,a5,2 lw a3,-36(s0) add a5,a3,a5 lw a4,0(a4) sw a4,0(a5) lw a5,-24(s0) addi a5,a5,-1 sw a5,-24(s0) .L3: lw a5,-24(s0) slli a5,a5,2 lw a4,-36(s0) add a5,a4,a5 lw a5,0(a5) lw a4,-28(s0) bge a4,a5,.L4 lw a5,-24(s0) bgez a5,.L5 .L4: lw a5,-24(s0) addi a5,a5,1 slli a5,a5,2 lw a4,-36(s0) add a5,a4,a5 lw a4,-28(s0) sw a4,0(a5) lw a5,-20(s0) addi a5,a5,1 sw a5,-20(s0) .L2: lw a4,-20(s0) lw a5,-40(s0) blt a4,a5,.L6 nop lw s0,44(sp) addi sp,sp,48 jr ra main: addi sp,sp,-2032 sw ra,2028(sp) sw s0,2024(sp) addi s0,sp,2032 addi sp,sp,-2000 lui a5,%hi(.LC0) addi a0,a5,%lo(.LC0) call printf li a5,-4096 addi a5,a5,88 addi a4,s0,-16 add a5,a4,a5 mv a1,a5 lui a5,%hi(.LC1) addi a0,a5,%lo(.LC1) call scanf li a5,-4096 addi a4,s0,-16 add a5,a4,a5 lw a5,88(a5) mv a1,a5 lui a5,%hi(.LC2) addi a0,a5,%lo(.LC2) call printf sw zero,-20(s0) j .L8 .L9: li a5,-4096 addi a5,a5,92 addi a4,s0,-16 add a4,a4,a5 lw a5,-20(s0) slli a5,a5,2 add a5,a4,a5 mv a1,a5 lui a5,%hi(.LC1) addi a0,a5,%lo(.LC1) call scanf lw a5,-20(s0) addi a5,a5,1 sw a5,-20(s0) .L8: li a5,-4096 addi a4,s0,-16 add a5,a4,a5 lw a5,88(a5) lw a4,-20(s0) blt a4,a5,.L9 lui a5,%hi(.LC3) addi a0,a5,%lo(.LC3) call printf sw zero,-20(s0) j .L10 .L11: li a5,-4096 addi a4,s0,-16 add a4,a4,a5 lw a5,-20(s0) slli a5,a5,2 add a5,a4,a5 lw a5,92(a5) mv a1,a5 lui a5,%hi(.LC4) addi a0,a5,%lo(.LC4) call printf lw a5,-20(s0) addi a5,a5,1 sw a5,-20(s0) .L10: li a5,-4096 addi a4,s0,-16 add a5,a4,a5 lw a5,88(a5) lw a4,-20(s0) blt a4,a5,.L11 li a0,10 call putchar li a5,-4096 addi a4,s0,-16 add a5,a4,a5 lw a4,88(a5) li a5,-4096 addi a5,a5,92 addi a3,s0,-16 add a5,a3,a5 mv a1,a4 mv a0,a5 call insertion_sort lui a5,%hi(.LC5) addi a0,a5,%lo(.LC5) call printf sw zero,-20(s0) j .L12 .L13: li a5,-4096 addi a4,s0,-16 add a4,a4,a5 lw a5,-20(s0) slli a5,a5,2 add a5,a4,a5 lw a5,92(a5) mv a1,a5 lui a5,%hi(.LC4) addi a0,a5,%lo(.LC4) call printf lw a5,-20(s0) addi a5,a5,1 sw a5,-20(s0) .L12: li a5,-4096 addi a4,s0,-16 add a5,a4,a5 lw a5,88(a5) lw a4,-20(s0) blt a4,a5,.L13 li a0,10 call putchar li a5,0 mv a0,a5 addi sp,sp,2000 lw ra,2028(sp) lw s0,2024(sp) addi sp,sp,2032 jr ra .data .LC0: .string "enter the number of elements n = " .LC1: .string "%d" .LC2: .string "enter %d elements one by one\n" .LC3: .string "\nthe original array is " .LC4: .string "%d " .LC5: .string "the sorted array is " .end