我製作了一個程序,我嘗試顯示用戶輸入的數字的二進制形式。但該程序沒有正確執行掩碼。我應該怎麼做才能解決它?在$ 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