From 6e37c539469cb065c9e6773b3fadbac4b1405e3e Mon Sep 17 00:00:00 2001 From: unlockable Date: Fri, 3 May 2024 18:14:00 +0800 Subject: [PATCH] 2.1 --- 1/homework/exp2/a.in | Bin 0 -> 84 bytes 1/homework/exp2/insert_sort.asm | 188 ++++++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 1/homework/exp2/a.in create mode 100644 1/homework/exp2/insert_sort.asm diff --git a/1/homework/exp2/a.in b/1/homework/exp2/a.in new file mode 100644 index 0000000000000000000000000000000000000000..2fdfd438c02588850a24e9b190a14c8b93e19e8b GIT binary patch literal 84 zcmWN}Ar687006)X7B&+j@CO5t=_qUjEjIiR8M6F= n, done loop + move $a0, $s1 + jal search + + move $a0, $v0 + move $a1, $s1 + jal insert + + addi $s1, $s1, 1 # i ++ + j item_loop +done_item_loop: + + lw $ra, 0($sp) + addi $sp, $sp, 8 + jr $ra + +search: # $a0: int n + subi $sp, $sp, 12 + sw $s0, 8($sp) + sw $s1, 4($sp) + sw $ra, 0($sp) + + la $s0, num_buff + sll $t0, $a0, 2 + add $s2, $s0, $t0 + lw $s2, 0($s2) # s2 = tmp = v[n] + + subi $s1, $a0, 1 # i = n - 1 +search_loop: + bltz $s1, done_search_loop # i < 0, done loop + jal add_compare_count + + sll $t0, $s1, 2 + add $t0, $s0, $t0 + lw $t0, 0($t0) # t0 = v[i] + ble $t0, $s2, done_search_loop # if v[i] <= tmp, break + + subi $s1, $s1, 1 # i-- + j search_loop + +done_search_loop: + addi $v0, $s1, 1 # return i + 1 + + lw $s0, 8($sp) + lw $s1, 4($sp) + lw $ra, 0($sp) + addi $sp, $sp, 12 + jr $ra +insert: # $a0: int k, $a1: int n + subi $sp, $sp, 12 + sw $s0, 8($sp) + sw $s1, 4($sp) + sw $ra, 0($sp) + + la $s0, num_buff # s0 = &v[0] + + sll $t0, $a1, 2 + add $s2, $s0, $t0 + lw $s2, 0($s2) # s2 = tmp = 'pivot' = v[n] + + subi $s1, $a1, 1 # s1 = i = n - 1 + +insert_loop: + blt $s1, $a0, done_insert_loop # i < k, done loop + sll $t0, $s1, 2 + add $t0, $s0, $t0 # t0 = &v[i] + lw $t1, 0($t0) + sw $t1, 4($t0) + + subi $s1, $s1, 1 # i-- + j insert_loop +done_insert_loop: + sll $t0, $a0, 2 + add $t0, $s0, $t0 + sw $s2, 0($t0) # t0 = &v[k] + + lw $s0, 8($sp) + lw $s1, 4($sp) + lw $ra, 0($sp) + addi $sp, $sp, 12 + jr $ra + + +add_compare_count: + la $t0, compare_count + lw $t1, 0($t0) + addi $t1, $t1, 1 + sw $t1, 0($t0) + jr $ra + +print_num_in_buff: + la $t0, num_N + la $t2, num_buff + lw $t0, 0($t0) + li $t1, 0 +print_loop: + bge $t1, $t0, done_print_loop + + sll $a0, $t1, 2 + add $a0, $t2, $a0 + lw $a0, 0($a0) + li $v0, 1 + syscall + + la $a0, space_string + li $v0, 4 + syscall + + addi $t1, $t1, 1 + j print_loop + +done_print_loop: + la $a0, newline_string + li $v0, 4 + syscall + jr $ra