簡體   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