мне нужна помощь. Я написал этот код в MARS. Предполагается получить целое число от пользователя и преобразовать его в HEX. Я шел по нему часами, и, насколько я понимаю, он должен работать нормально. Я включил только часть цикла и вывод программы, так как это единственная часть, которая не работает. Может ли кто-то, пожалуйста, указать, где код идет не так? Спасибо.
P.S.
Я думаю, что это портит побитовое И, я использовал это, чтобы замаскировать младшие биты, но по некоторым причинам почти кажется, что это ДОБАВЛЕНИЕ, а не ИДИ. : - (
li $s1, 8 # Set up a loop counter
Loop:
rol $s0, $s0, 4 # Roll the bits left by four bits - wraps highest bits to lowest bits (where we need them!)
and $t0, $s0, 16 # Mask off low bits (logical AND with 000...01111)
slti $t1, $t0, 10 # Determine if the bits represent a number less than 10 (slti)
bne $t1, $zero, MakeLowDigit # If yes (if lower than 9), go make a low digit
MakeHighDigit:
subi $t0, $t0, 10 # Subtract 10 from low bits
addi $t0, $t0, 64 # Add them to the code for 'A' (65), becomes a..f
j DigitOut
MakeLowDigit:
addi $t0, $t0, 47 # Combine it with ASCII code for '0', becomes 0..9
DigitOut:
move $a0, $t0 # Output the ASCII character
li $v0, 11
syscall
subi $s1, $s1, 1 # Decrement loop counter
bne $s1, $zero, Loop # Keep looping if loop counter is not zero