📄 zj.txt
字号:
.text
.align 2
.globl main
main:
la $a0,str_tip
li $v0,4 #print string
syscall #print "how many numbers do you want to input?"
li $v0, 5
syscall
sll $t0, $v0, 2 # How many bytes should $sp down?
sub $sp, $sp, $t0
move $s0, $sp # Store the start address of array
move $s1, $v0
li $v0, 4
la $a0, str_Enter
syscall
move $a0, $s0 #M $sp
move $a1, $s1 #M $v0
jal scanf_arr
move $a0, $s0 #M $sp
move $a1, $s1 #M $v0
jal sort
la $a0, str_outputnumber
li $v0, 4
syscall
move $a0, $s0 #M $sp
move $a1, $s1 #M $v0
jal print_arr
la $a0, str_continue
li $v0, 4
syscall
li $v0, 12 #M 8
syscall
#M lw $t1, y
li $t1, 121 # 'y' in ascii is 121
beq $v0, $t1, main
li $v0, 4
la $a0, str_exit
syscall
li $v0, 10
syscall
scanf_arr:
addi $sp, $sp, -8
sw $s0, 4($sp)
sw $s1, 0($sp)
li $s0, 0 # $s0 stores the offset of current int
L1:
sltu $t0, $s0, $a1
beq $t0, $zero, scanf_exit # Branch if $S1 is greater than or equal $s0
sll $t0, $s0, 2
add $t1, $a0, $t0 # $t1 stores the address of current int to display
li $v0, 5
syscall
sw $v0, 0($t1) # Write the data to array
addi $s0, $s0, 1
j L1
scanf_exit:
lw $s0, 4($sp)
lw $s1, 0($sp)
addi $sp, $sp, 8
jr $ra
print_arr:
#M addi $sp, $sp, -8
addi $sp, $sp, -12
sw $s0, 8($sp)
sw $s1, 4($sp)
sw $s2, 0($sp)
li $s0, 0 # $s0 stores the offset of current int
move $s2, $a0
L2:
sltu $t0, $s0, $a1
beq $t0, $zero, print_exit # Branch if $S1 is greater than or equal $s0
sll $t0, $s0, 2
#M add $t1, $a0, $t0
add $t1, $s2, $t0 # $t1 stores the address of current int to display
lw $a0, 0($t1)
li $v0, 1
syscall
li $a0, ' '
li $v0, 11
syscall
addi $s0, $s0, 1
j L2
print_exit:
lw $s2, 0($sp)
lw $s1, 4($sp)
lw $s0, 8($sp)
addi $sp, $sp, 12
jr $ra
sort:
addi $sp,$sp,-20
sw $ra,16($sp)
sw $s3,12($sp)
sw $s2,8($sp)
sw $s1,4($sp)
sw $s0,0($sp)
move $s2,$a0
move $s3,$a1
move $s0,$zero
for1tst:
slt $t0,$s0,$s3
beq $t0,$zero,exit1
addi $s1,$s0,-1
for2tst:
slti $t0,$s1,0
bne $t0,$zero,exit2
sll $t1,$s1,2
add $t2,$s2,$t1
lw $t3,0($t2)
lw $t4,4($t2)
slt $t0,$t4,$t3
beq $t0,$zero,exit2
move $a0,$s2
move $a1,$s1
jal swap
addi $s1,$s1,-1
j for2tst
exit2:
addi $s0,$s0,1
j for1tst
exit1:
lw $s0,0($sp)
lw $s1,4($sp)
lw $s2,8($sp)
lw $s3,12($sp)
lw $ra,16($sp)
addi $sp,$sp,20
jr $ra
swap:
sll $t1,$a1,2
add $t1,$a0,$t1
lw $t0,0($t1)
lw $t2,4($t1)
sw $t2,0($t1)
sw $t0,4($t1)
jr $ra
.data
str_tip:
.asciiz " welcome to use sort procedure\n Enter how many numbers do you want to input : \n"
str_Enter:
.asciiz "Enter The Number: \n"
str_outputnumber:
.asciiz "The Result is: \n"
str_continue:
.asciiz "\n继续排序请输入y,退出输入n:\n"
str_exit:
.asciiz " Exit System!"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -