У меня возникли небольшие проблемы с пониманием того, как преобразовать двоичную строку, такую как '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» в начале.
Спасибо!