2016-11-04 138 views
0

我有16個十六進制值,我試圖通過並隔離位b6,b2,b1,b0這就是我得到的0x47。Mips彙編語言隔離位

.data 
    #dellares all 16 test cases hexadecimal values 
    testCases: .byte 0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47 

    #set size of array to 16 
    size: .word 16 

    NL: .asciiz "\n" 
    .text  

main: 
lw $s7, size 
move $s1, $zero 
move $s2, $zero 

loop: 
bge $s1, $s7, loop_end 
lb $s0, testCases($s2) 

andi $a0, $s0, 0x47 
li $v0, 1 
syscall 
la $a0, NL 

li  $v0, 4 
syscall 
addi  $s1, $s1, 1 
addi  $s2, $s2, 4 
j  loop 

loop_end: 

然而,這並不打印出想要的結果,它打印出these results

比你的任何幫助

回答

0

你通過一個字節數組去,所以你只要加1到$s2,而不是4.

如果您希望以十六進制格式打印結果,那麼您將不得不編寫自己的例程以將數字轉換爲字符串,因爲SPIM沒有系統調用FO那個。 MARS does,但它會添加前導零,以便每個數字都打印8個十六進制數字。

另外,如果您只想獲得這4位數據,或者您想將它們組合在一起(例如0x43 - >0xB),我也沒有真正清楚。如果你想把它們組合在一起,它會比AND(更多的AND,右移和OR,更精確)多一點。