Как упаковать (сконденсировать) байты строки, используя или и sll?

Я пишу программу, которая читает 4 шестнадцатеричные цифры, которые представляют собой целое число без знака, затем она конденсирует эти цифры в $t1 и, наконец, вычисляет и отображает десятичное число.

Я полностью усвоил решение в теории, но у меня проблемы с использованием mips, так как это моя первая программа. В настоящее время у меня проблемы с хранением байтов строки. Вот мой код до сих пор:

.data 
msg1:   .asciiz "Enter the hexadecimal :    "
newline:   .asciiz  "\n"
.text

main:
#Print string msg1
li $v0 ,4   # print_string syscall code = 4
la $a0,msg1 #load the adress of msg
syscall

# Get input A from user and save
li  $v0,8       # read_string syscall code = 8
syscall 
move    $t0,$v0     # syscall results returned in $v0

li $v0,10
syscall

Я знаю, что я буду использовать фунт Rdest, адрес в какой-то момент. Но разве мне не придется читать каждую цифру строки одну за другой, если это так?

1 ответ

Решение
.data
   msg1:   .asciiz "Enter the hexadecimal :    "
   buffer: .space 10
.text

main:
    #Print string msg1
    li $v0 ,4   # print_string syscall code = 4
    la $a0,msg1 #load the adress of msg
    syscall

    # Get input A from user and save
    la $a0, buffer  # address
    li $a1, 10      # length
    li  $v0,8       # read_string syscall code = 8
    syscall

    li $t0, 0                # result
loop:
    lb $t1, ($a0)            # fetch char
    beq $t1, $0, done        # zero terminator?
    addiu $t1, $t1, -10      # line feed?
    beq $t1, $0, done
    addiu $t1, $t1, -38      # convert digit
    sltiu $t2, $t1, 10       # was it a digit?
    bne $t2, $0, append      # yes
    # add validation and upper case here as needed
    addiu $t1, $t1, -39      # convert lower case letter
append:
    sll $t0, $t0, 4          # make room
    or $t0, $t0, $t1         # append new digit
    addiu $a0, $a0, 1        # next char
    j loop

done:
    move $a0, $t0            # print result
    li $v0, 1
    syscall

    li $v0,10
    syscall
Другие вопросы по тегам