mips汇编语言实现字符串转换和整数排序并输出

详情请看代码:

 .data
start:  .asciiz "Input Numbers: \n"            #输入提示串
output_1:  .asciiz "The  num  of  all  is:   "     #数组大小
output_2:  .asciiz  "\n The detail:\n"           #数组详细数值
empty:   .asciiz  "  "                     #空格
output_3:  .asciiz "\n The detail after sort is:\n"     #排序后的数组数据
num:  .word 0             
      .space 1024                             #定义一个整型数组及大小
string:  .space 1024                           #定义字符串数组及大小
   .globl main 
   .text
main:   la  $a0,start
        li $v0,4
        syscall           #初始提示串
        la  $a0,string 
        li  $a1,1024
        li $v0,8
        syscall         #输入字符串
        move $t0,$a0
        li $s0,0x20          #空格
        li $s1,0x0a           #换行
        la  $a0,num           #数组初地址
        move $t1,$a0
        li $a0,0
        li $t2,0
        addi  $sp,$sp,-12
        sw  $t1,0($sp)
        sw  $t0,4($sp)
        sw  $ra,8($sp)          #利用栈保护相关数值
        jal  change1        #将字符串转换为数值并储存
        lw  $ra,8($sp)
        lw  $t0,4($sp)
        lw  $t1,0($sp)
        addi  $sp,$sp,12         #恢复
        la  $a0,output_1
        li $v0,4
        syscall
        move  $a0,$t2
        li  $v0,1
        syscall
        la  $a0,output_2                #输出提示串
        li $v0,4
        syscall
        addi  $sp,$sp,-12
        sw  $t1,0($sp)     
        sw  $t2,4($sp)
        sw  $ra,8($sp)
        jal  output1           #输出转换后的数值数组
        lw   $ra,8($sp)
        lw   $t2,4($sp)
        lw   $t1,0($sp)
        addi  $sp,$sp,12
        addi  $sp,$sp,-12
        sw  $t2,0($sp)    #数组大小
        sw  $t1,4($sp)    #数组初地址
        sw  $ra,8($sp)
        jal  done             #调用排序函数
        lw  $ra,8($sp)
        lw  $t1,4($sp)
        lw  $t2,0($sp)
        addi  $sp,$sp,12
        la  $a0,output_3        #输出提示
        li  $v0,4
        syscall
        jal  output1            #输出排序后的数组
        li  $v0,10                  #退出
        syscall
loop0:  sw $a0,($t1)          #存入整型数组
        addi  $t1,$t1,4       #整型数组地址加4
        addi $t2,$t2,1      #记录数组大小
        addi $t0,$t0,1      #字符串地址加1
        li $a0,0
change1: lb  $a3,($t0)           #取一个字节
        beq $a3,$s0,loop0         #为空格则到loop0
        beq  $a3,$s1,ret1         #为回车则到ret1
        beqz  $a3,ret             #为0则到ret
        mul  $a0,$a0,10          
        addi $a2,$a3,-48          #字符转换
        addu  $a0,$a0,$a2
        addi  $t0,$t0,1       #地址加一
        b  change1
done: la   $a0, num    #a0=num首地址
       addi  $t0,$t2,-1      #外循环变量t0初始化为数组长度-1
lp0:   addi $a1, $a0, 4    #外循环起点。内循环的起始比较单元初始化
       addi $t1, $t0,-1    #内循环变量t1初始化,t1=t0-1
lp1:   lw   $t2, ($a0)     #内循环起点。取出本趟比较的单元
       lw   $t3, ($a1)     #逐个取出随后的单元
       ble  $t2, $t3, next #前面的小,则什么都不做
       sw   $t2, ($a1)     #前面的大,则交换2个单元
       sw   $t3, ($a0)
next:  addi $a1, $a1, 4    #a1指向下一个单元
       addi $t1, $t1,-1    #内循环变量t1--
       bgez  $t1,lp1   #内循环结束,直到t1=0退出循环
       addi $a0, $a0, 4    #准备下一轮,a1指向下一轮比较的单元
       addi $t0, $t0,-1    #外循环变量t0--
       bgt  $t0, $0, lp0   #外循环结束,直到t0=0退出循环
       j  ret         # 返回

output1:   beqz  $t2,ret       #控制条件
           lw  $a0,($t1)
           li  $v0,1            #输出数组元素
           syscall
           addi  $t2,$t2,-1
           addi  $t1,$t1,4
           la  $a0,empty          #空格
           li $v0,4
           syscall
           b  output1
ret1:  sw  $a0,($t1)
       addi  $t2,$t2,1
       jr  $ra           #存储并返回
ret:  jr  $ra            #返回

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值