【发布时间】:2012-10-09 06:54:10
【问题描述】:
我编写了一个程序,尝试显示用户输入的数字的二进制形式。但是程序没有正确地进行掩蔽。我该怎么解决?
$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
更新: 我按照 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,或转换为 '0' /'1' 通过移位添加额外的 0x30)。
-
我为什么要这样做。我正在显示存储在 $t0 中的结果,如果两个数字的 MSB 匹配,则可以为 1,如果两个数字的 MSB 不匹配,则为 0。
-
t0 包含 0 或 0x80000000。如果要打印 0 或 1,则应在打印前将这 31 位移动。 (但不要认为我的话是理所当然的,自从我编写 MIPS 以来已经很久了)。
标签: assembly mips bit-shift pcspim