Mips汇编语言隔离位

时间:2016-11-04 19:00:43

标签: hex decimal mips

我有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

比你提供任何帮助

1 个答案:

答案 0 :(得分:0)

你要经历一个字节数组,所以你应该只添加1到$s2,而不是4。

如果您希望以十六进制形式打印结果,那么您将不得不编写自己的例程来将数字转换为字符串,因为SPIM没有系统调用。 MARS does,但它会添加前导零,以便每个数字都以8个十六进制数字打印。

另外,如果您只想获得这4位,或者您还想将它们组合在一起(例如0x43 - > 0xB),我并不是很清楚。如果你想将它们组合在一起,它将不仅仅需要一个AND(和其他AND,一个右移,一个OR,确切地说)。