MIPS if 语句未被输入
MIPS if statement not being entered
我正在尝试查看用户输入的第二个字符是否为 0,例如,如果他们输入 "A0123",则该语句为真。我设法删除了等号,但是当我 运行 我的程序时,它没有进入应该检查第二个字符是否为 0 的分支。
在寄存器 $t2 中,我存储了用户的准确输入(带有换行符)。在 $s5 中,我还用换行符存储了 asciiz 字符串“0”。然后我删除用户输入的第一个字符。
出了什么问题,我该如何解决?
.data
zero: .asciiz "0\n"
la $s5, zero
addiu $t2,$t2,1 #remove equals sign
beq $t2, $s5, zero2 #referencing 0
beq $t2, $s6, one2
j exit2
zero2:
move $t2, $t0
j exit2
$s5
大概 $t2
是指针,它们永远不会相等。您应该比较它们指向的字符。你可以这样做:
la $s5, zero
lb $s5, ($s5)
lb $t3, 1($t2)
beq $t3, $s5, zero2
当然你并不真的需要zero
这个字符串,你可以简单地使用立即数,比如:
lb $t3, 1($t2)
li $s5, '0'
beq $t3, $s5, zero2
我正在尝试查看用户输入的第二个字符是否为 0,例如,如果他们输入 "A0123",则该语句为真。我设法删除了等号,但是当我 运行 我的程序时,它没有进入应该检查第二个字符是否为 0 的分支。
在寄存器 $t2 中,我存储了用户的准确输入(带有换行符)。在 $s5 中,我还用换行符存储了 asciiz 字符串“0”。然后我删除用户输入的第一个字符。
出了什么问题,我该如何解决?
.data
zero: .asciiz "0\n"
la $s5, zero
addiu $t2,$t2,1 #remove equals sign
beq $t2, $s5, zero2 #referencing 0
beq $t2, $s6, one2
j exit2
zero2:
move $t2, $t0
j exit2
$s5
大概 $t2
是指针,它们永远不会相等。您应该比较它们指向的字符。你可以这样做:
la $s5, zero
lb $s5, ($s5)
lb $t3, 1($t2)
beq $t3, $s5, zero2
当然你并不真的需要zero
这个字符串,你可以简单地使用立即数,比如:
lb $t3, 1($t2)
li $s5, '0'
beq $t3, $s5, zero2