[英]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.