1.3
This commit is contained in:
60
1/homework/exp1/exp1_3.asm
Normal file
60
1/homework/exp1/exp1_3.asm
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
.data
|
||||||
|
.text
|
||||||
|
li $v0 5 # read in num
|
||||||
|
syscall
|
||||||
|
|
||||||
|
move $s0, $v0 # $s0 is n
|
||||||
|
move $a0, $v0
|
||||||
|
li $v0, 9 # malloc
|
||||||
|
syscall
|
||||||
|
move $s1, $v0 # $s1 = a
|
||||||
|
|
||||||
|
move $t0, $zero # a0 = 0
|
||||||
|
|
||||||
|
move $t0, $zero # i = 0
|
||||||
|
move $t1, $s1 #t1 = a
|
||||||
|
read_in_num: bge $t0, $s0, done_read_in_num # i >= n, break
|
||||||
|
li $v0, 5 # read in num
|
||||||
|
syscall
|
||||||
|
|
||||||
|
sw $v0, 0($t1) # a[i] = v0
|
||||||
|
addi $t0, $t0, 1 # i++
|
||||||
|
addi $t1, $t1, 4 # t1 += 4
|
||||||
|
j read_in_num
|
||||||
|
|
||||||
|
done_read_in_num: srl $s2, $s0, 1 # s1 = n / 2
|
||||||
|
move $t0, $zero # i = 0
|
||||||
|
move $t1, $s1
|
||||||
|
|
||||||
|
subi $t2, $s0, 1 # t2 = n - 1
|
||||||
|
sll $t2, $t2, 2 # t2 *= 4
|
||||||
|
add $t2, $t2, $s1
|
||||||
|
reverse: bge $t0, $s2, done_reverse # i >= n / 2, break
|
||||||
|
lw $t3, 0($t1) # t3 = a[i]
|
||||||
|
addi $t3, $t3, 1 # t3 += 1
|
||||||
|
|
||||||
|
lw $t4, 0($t2) # t4 = a[n - i - 1]
|
||||||
|
addi $t4, $t4, 1 # t4 += 1
|
||||||
|
|
||||||
|
sw $t4, 0($t1)
|
||||||
|
sw $t3, 0($t2)
|
||||||
|
|
||||||
|
addi $t0, $t0, 1
|
||||||
|
addi $t1, $t1, 4
|
||||||
|
subi $t2, $t2, 4
|
||||||
|
j reverse
|
||||||
|
|
||||||
|
done_reverse: move $t0, $zero
|
||||||
|
move $t1, $s1
|
||||||
|
|
||||||
|
output: bge $t0, $s0 done_output
|
||||||
|
lw $a0, 0($t1)
|
||||||
|
li $v0 1
|
||||||
|
syscall
|
||||||
|
|
||||||
|
addi $t0, $t0, 1
|
||||||
|
addi $t1, $t1, 4
|
||||||
|
j output
|
||||||
|
|
||||||
|
done_output: li $v0 17
|
||||||
|
syscall
|
||||||
Reference in New Issue
Block a user