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

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

.text 
.globl main
main:
    la $t6,array         # 将数组地址其实地址放到 t6位置上
    move $t7 $zero       # 用于计数 控制输入
    addi $t8 $zero 10
    j input
input:
    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 sort3

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

.data 
    array:
        .space 2048     # 开辟数组空间 
    input_msg:
        .ascii "Input number: " # 输入数字提示符
    space_str:
        .ascii "\n"      # 输出空格信息

最后,老套路,宣传一波自己的公众号!(求关注哇!)
本人中大一肥宅,欢迎大家关注,请扫下面的二维码(〃’▽’〃)


二维码

如果觉得有帮助的话,可以扫码,赞赏鼓励一下!谢谢!


这里写图片描述

你可能感兴趣的:(简单题,计算机基础,MIPS汇编语言)