[MIPS汇编语言]简单排序实现

来源:互联网 发布:首都 知乎 编辑:程序博客网 时间:2024/05/19 15:25

排序是程序语言的基础操作
通过排序练习可以提高对语言的掌握程度
汇编是可以说是最底层的语言了,学习汇编,可以提高对几乎所有语言的理解程度。(个人看法)
下面展示了用MIPS汇编语言实现的简单排序
(对了,如果助教,或者教授, 你看到这个,别怀疑是我在网上抄的哇!!!可以先跟我确认下哇!!!!)

.text .globl mainmain:    la $t6,array         # 将数组地址其实地址放到 t6位置上    move $t7 $zero       # 用于计数 控制输入    addi $t8 $zero 10    j inputinput:    la $a0 input_msg     # 将输入信息放到a0 这个寄存器上    li $v0 4             # 将命令符寄存器中放入立即数4 用于字符输出    syscall              # 输入提示符的输入完成    li $v0 5             # 调用了输入命令 5 装载到$v0上    syscall              # 系统调用 输入的数被放到了v0上    move $t0 $t7         # 将临时的计数寄存器中的内容放到临时寄存器t0上    mul $t0 $t0 4        # 得到了在该点的地址偏移值    add $t0 $t0 $t6      # 将数组地址加上了偏移量t0,得到当前地址     sw $v0 0($t0)        # 将$vo中的数放到t0对应的地址中    addi $t7 $t7 1       # 对计数的$t7进行加一操作    blt $t7 $t8 input    # 如果不相等,就循环该进程# 开始排序了--- 采用 简单排序方式    move $t7 $zero       # 计数初始化,作为外层的遍历下标sort1:    addi $t5 $t7 1    addi $t8 $zero 9     slt $t0 $t7 $t8          beq $t0 $zero output # 经过确认了,一定会到达第二层sort2:    # sort2表示排序从t7 + 1开始到结尾的部分和t7比较大小(t7用于外层计数 t5用于内层计数)    # 先将两个数给拉下来放到$a1 $a2 两个 register上    # 用t3 t4 做地址运算同时存储了那两个东西的地址    mul $t3 $t7 4    add $t3 $t3 $t6      # 得到了外层的那个数的地址    lw $a1 0($t3)        # 得到了外层那个数值    mul $t4 $t5 4    add $t4 $t4 $t6      # 得到了内层的那个数的地址    lw $a2 0($t4)        # 得到了内层那个数值    slt $t0 $a1 $a2      # 如果内层那个数大于等于外层那个数 t0就会是0    beq $t0 $zero swap   #     就要进行交换sort3:    addi $t5 $t5 1       # 内层计数加一    addi $t8 $zero 10    slt $t0 $t5 $t8          bne $t0 $zero sort2  # 如果不是0的话,说明还没到终点 还需要进行第二层循环     addi $t7 $t7 1       # 外层计数加一    j sort1              # 进行外层循环swap:    # 进行交换,交换地址是 t3 t4 对应的值是 a1 a2    sw $a2 0($t3)    sw $a1 0($t4)    j sort3output:     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.data     array:        .space 2048     # 开辟数组空间     input_msg:        .ascii "Input number: " # 输入数字提示符    space_str:        .ascii "\n"      # 输出空格信息

最后,给我的公众号拉一波关注!
本人中大一肥宅,欢迎大家关注,请扫下面的二维码


二维码

原创粉丝点击