我有16个十六进制值,我正在尝试循环并隔离b6,b2,b1,b0处的位,这就是我从中得到的0x47。
.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 :(得分:0)
你要经历一个字节数组,所以你应该只添加1到$s2
,而不是4。
如果您希望以十六进制形式打印结果,那么您将不得不编写自己的例程来将数字转换为字符串,因为SPIM没有系统调用。 MARS does,但它会添加前导零,以便每个数字都以8个十六进制数字打印。
另外,如果您只想获得这4位,或者您还想将它们组合在一起(例如0x43
- > 0xB
),我并不是很清楚。如果你想将它们组合在一起,它将不仅仅需要一个AND(和其他AND,一个右移,一个OR,确切地说)。