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