1

符号なし整数を表す 4 桁の 16 進数を読み取り、それらの桁を $t1 に凝縮し、最後に 10 進数を計算して表示するプログラムを作成しています。

理論的には完全に解決策を把握しましたが、初めてのプログラムで 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

ある時点で lb Rdest, address を使用することはわかっています。でも、その場合文字列の各桁を 1 つずつ読み取らなければならないのでしょうか?

4

1 に答える 1

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
于 2015-11-17T13:25:27.607 に答える