我正在尝试编写一个程序,它一次接收一个整数并将它们转换为8位二进制,直到输入0并且程序终止,在MIPS中。我的代码输出偶数输入的零和奇数的1。我无法弄清楚为什么会这样。
.data
zeroString: .asciiz "00000000\n"
.text
main:
li $v0, 5 # 5 = syscall code to read int
syscall
beq $v0, 0, exit #exit when 0 is entered
move $t0, $v0 #t0=v0
la $t2, 0 #counter
do: #loop
ANDI $t1, $t0, 0x01 #check if least significant digit is 1
addi $t2, $t2, 1 #increase counter
move $a0, $t1 #printing value of t1
li $v0, 1
syscall
srl $t1, $t1, 1 #shift to next digit
bne $t2, 7, do #check if counter equal to target
# Print a new line
li $a0, '\n' # $a0 = ascii code for newline char
li $v0, 11 # 11 = syscall code to print char
syscall # Print newline
j main
exit:
la $a0, zeroString
li $v0, 4
syscall
li $v0, 10
syscall
答案 0 :(得分:0)
你的意思是它打印了8位低位(作为单位整数)?
在调试器中单步执行代码并查看寄存器值的更改。仔细查看您正在使用哪些寄存器作为循环中每条指令的输入和输出。
你永远不会写$t0
,所以andi $t1, $t0, 1
每次迭代都会生成相同的内容。 srl $t1, $t1, 1
应该转移$t0
吗?你实际上正在改变你即将覆盖的临时性。