繁体   English   中英

无法理解MIPS汇编指令的一小部分

[英]Can't understand small part of a MIPS assembly instruction

该程序打印从0到Z的ASCII字符。输出为

0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ

问题是如何更改程序,使其每三个ASCII字符打印一次。 这样输出必须看起来像这样

0369<?BEHKNQTWZ]

当我将addi $s0,$s0,1的常量更改addi $s0,$s0,1 addi $s0,$s0,3 ,输出是很多ASCII字符,就像一个无限循环。

.text


main:
          li    $s0,0x30


loop:
         move   $a0,$s0     

         li $v0,11      
         syscall            

         addi   $s0,$s0,1       # what happens if the constant is changed?

          li    $t0,0x5b
         bne    $s0,$t0,loop
         nop


stop:    j       stop       
         nop    

我不了解更改常数后程序变得疯狂的原因。

我编写了自己的代码,如下所示,该代码可以正常工作并且可以完成工作,但是我想了解上面的代码,因为这是一项任务。

 .data



 .text

        main:
              li $s0,0x30



       for: 
             addi $a0,$s0,0
             li $v0,11
             syscall
             li $t0,0x5a
             bgt $s0,$t0, done
             addi $s0,$s0,3
             j for
       done:            

此打印的字符数(43)不能被3整除,因此,每次加3,循环就会超出退出条件(s0 == t0)。 尝试将bne更改为blt

您自己的代码执行的操作完全相同,不同之处在于, 它经过终点会跳出循环,而不是返回到顶部( 除非有回跳)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM