该程序打印从0到Z的ASCII字符。输出为
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
问题是如何更改程序,以便打印每三个ASCII字符。因此输出必须如下所示
0369<?BEHKNQTWZ]
当我将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:
答案 0 :(得分:1)
此打印的字符数(43)不能被3整除,因此每次加3,您的循环将超过其退出条件(s0 == t0)。尝试将bne
更改为blt
。
你自己的代码完全相同,只是当它超过终点时跳出循环,而不是回到顶部,除非它有