您的位置:首页 > 其它

[MIPS汇编语言]InsertionSort插入排序

2017-10-21 08:42 1566 查看
如果对MIPS实现数组的输入输出不懂,可以点这里

如果对MIPS实现简单排序有兴趣,可以点这里

如果你想要看一下怎么用C++(或者C)实现插入排序,可以点这里

如果你想要看一下用Python实现插入排序,可以点这里

这里举得栗子是降序排列

MIPS指令代码如下:建议和比较熟悉的高级程序语言对比着看

.data
array:
.space 1024
input_msg:
.ascii "input the number"
space_str:
.ascii "\n"      # 输出空格信息
.text
.globl main
main:
la $t6 array      # 将数组地址的起始位置放到t6寄存器中
move $t7 $zero    # 将t7寄存器初始化为0,用于计数
addi $t8 $zero 10 # t8寄存器内存储好10
input:
la $a0 input_msg  # 将a0寄存器中放input输入信息
la $v0 4          # 4号为输出字符串命令
syscall           # 系统命令调用

la $v0 5          # 5号为数字输入命令
syscall           # 系统命令调用

mul $t0 $t7 4     # 计算出偏移量
add $t0 $t0 $t6   # 基地址加上偏移量得到目标地址
sw $v0 0($t0)     # 将输出的数放到目标地址中

addi $t7 $t7 1    # t7寄存器内数值加一
bne $t7 $t8 input # 如果不是相等的话,就继续输入

addi $t7 $zero 1  # 将t7初始化为1
sort:
slt $t0 <
cf27
span class="hljs-variable">$t7 10    # 小于10的真值放到t0上
beq $t0 $zero output # 如果等于10就直接输出

mul $t0 $t7 4     # 得到偏移量
add $t0 $t0 $t6   # 得到目标地址
lw $a1 0($t0)     # a1放key

addi $t5 $t7 -1   # 得到i-1 j = i - 1
sort2:
mul $t0 $t5 4     # t5是j
add $t0 $t0 $t6   # 得到目标地址
lw $t4 0($t0)     # t4中放有a[j]
lw $t3 4($t0)     # t3中放有a[j + 1]

slt $t0 $t5 $zero # j < 0 的真值放到t0上
bne $t0 $zero putKey  # 如果是真的小于0了直接到交换位置

slt $t0 $t4 $a1   # a[j] < key 的真值放到t0上
beq $t0 $zero putKey # 如果不是就到交换环节

mul $t0 $t5 4     # t5是j
add $t0 $t0 $t6   # 得到目标地址
sw $t4 4($t0)     # a[j + 1] = a[j]

addi $t5 $t5 -1   # j = j - 1
j sort2
putKey: # a[j + 1] = key
mul $t0 $t5 4     # t5是j
add $t0 $t0 $t6   # 得到目标地址
sw $a1 4($t0)     # 将key写入a[j + 1]
addi $t7 $t7 1    # i = i + 1
j sort

output:
move $t7 $zero       # 用于计数 控制输入
addi $t8 $zero 10    # 总共有10个数
print_all:
move $t0 $t7         # 将 t7的数放到这个临时的t0上
mul $t0 $t0 4        # 得到偏移量
add $t0 $t6 $t0

lw $a0 0($t0)        # 所得到的地址的的数 load到 a0上
li $v0 1
syscall

la $a0 space_str
li $v0 4
syscall

addi $t7 $t7 1
blt $t7 $t8 print_all

jr $ra

li $v0 10             # 退出
syscall
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: