【发布时间】:2016-11-07 20:14:49
【问题描述】:
假设我们输入了单词“test”,并且我们希望程序将这个单词反转(“tset”)作为输出返回。
使用 C,典型的 for 循环可以轻松完成这项工作。
for(i='/0'; i>=0; i--)
printf("%c", str[i]);
但在 MIPS,事情至少会变得相当混乱。
At 试图通过创建两个循环来使其工作。一个用于简单地读取字符串的每个字符,另一个用于反向打印它们:
.data
str: .space 15
.text
.globl main
main:
li $v0, 8 #scan a string
la $a0, str
la $a1, 15
syscall
add $t0, $zero, $zero #counter
readingloop:
lb $a0, str($t0) #read each character
beq $a0, '\0', readingexit #make sure the string is not yet over
addiu $t0, $t0, 1 #i++
j readingloop
readingexit:
reversingloop:
li $v0, 11 #print a character you have read
lb $a0, str($t0)
syscall
beq $a0, '0', reversingexit #make sure the string
#hasn't reached the first letter yet
subiu $t0, $t0, 1 #i--
j reversingloop
reversingexit:
li $v0, 10
syscall
而且效果还不错。
有点。因为在 MARS,光标一直向右移动。
似乎逆向循环需要检查计数器何时在我们上面所说的 for 循环的“i>=0”处成功为零。
怎么会这样?
【问题讨论】: