我制作了一个程序,我尝试显示用户输入的数字的二进制形式。但该程序没有正确执行掩码。我应该怎么做才能解决它?在$ S0通过移位显示二进制数
用户输入
Loop:
and $t0,$s0,2147483648 // anding it with this number because only its MSB is 1 all other bits are zero
sll $s0,$s0,1
move $a0,$t0
li $v0,1
syscall
beq $t1,31,Exit
addi $t1,$t1,1
j Loop
UPDATE: 我修改此代码由dbrank0的建议,但现在它显示的32位
Loop:
and $t0,$s0,2147483648
sll $s0,$s0,1
beq $t1,31,Exit
move $a0,$t0
addi $t1,$t1,1
bgtu $t0,0,Check
li $t0,0
j Loop
Disp:
li $v0,1
syscall
j Loop
Check:
li $t0,1
j Disp
它将仅一个位,而不是如果有人能够帮助我解决这个问题,那就太好了。
问候
屏蔽可能是正确完成的,但在打印出来之前,您可能需要将要打印的位(可以通过将其右移31个位置来实现0/1,或者通过移动另外的0x30来移入'0'/'1')。 – dbrank0
我为什么要那样做。我将显示存储在$ t0中的结果,该结果可以是两个数字匹配的MSB中的1,如果两个数字的MSB都不匹配,则为0。 – Naruto
t0包含0或0x80000000。如果要打印0或1,则应在打印之前将其移位31位。 (但是不要把我的话当成理所当然,从我编程MIPS起就已经过去了)。 – dbrank0