调试MIPS十进制到8位二进制程序

时间:2017-11-16 04:28:19

标签: assembly mips32

我正在尝试编写一个程序,它一次接收一个整数并将它们转换为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

1 个答案:

答案 0 :(得分:0)

你的意思是它打印了8位低位(作为单位整数)?

在调试器中单步执行代码并查看寄存器值的更改。仔细查看您正在使用哪些寄存器作为循环中每条指令的输入和输出。

你永远不会写$t0,所以andi $t1, $t0, 1每次迭代都会生成相同的内容。 srl $t1, $t1, 1应该转移$t0吗?你实际上正在改变你即将覆盖的临时性。