MIPS ASM: Как преобразовать двоичное число в шестнадцатеричное - PullRequest
0 голосов
/ 20 марта 2019

У меня возникли небольшие проблемы с пониманием того, как преобразовать двоичную строку, такую ​​как '0x0123beef', в ее шестнадцатеричную форму, просто 0x0123beef в мипах.

Я понимаю, как подойти к проблеме, но я очень озадачен тем, как на самом деле это сделать. по сути, мне удалось собрать некоторый код вместе

    .data 
 Hex: .word 0x0123b5ef
 ans: .asciiz "\nHexadecimal equivalent: " 
 result: .space 10
.text   

     main:

     la $t2, Hex 

    la $a0, ans
    li $v0, 4
     syscall



     li $t0, 8               # counter
     la $t3, result      
     Loop:
     beqz $t0, Exit      # branch to exit if counter is equal to zero
     rol $t2, $t2, 4     # rotate 4 bits to the left

     and $t4, $t2, 0xf           # mask with 1111
     ble $t4, 9, Sum     # if less than or equal to nine, branch to sum
     addi $t4, $t4, 0x37           # if greater than nine, add 55
     b End
     Sum:
         addi $t4, $t4, 0x30   # add 48 to result
     End: 
     sb $t4, 0($t3)          # store hex digit into result
     addi $t3, $t3, 1        # increment address counter
     sub $t0, $t0, 1       # decrement loop counter
     j Loop
      Exit:

     la $a0, result 

    li $v0, 4
     syscall

     la $v0, 10
     syscall

Я изо всех сил пытаюсь заставить это фактически отображать 0123beef во-первых. Это дает 10010000 каждый раз, когда я запускаю его. После того, как я решу эту проблему, я хочу знать, как поставить «0x» в начале.

Спасибо!

...