0

配列の最初の 2 つの要素が上書きされる MIPS コードで問題が発生しています。ユーザーからの 4 つの異なる入力をそれぞれ 1 バイト受け入れ、サイズ 4 の「.space」に格納します。すべてを印刷すると、最初の 2 つの要素が空白になります。これは改行と関係があると考えていますが、完全にはわかりません。これが私が取り組んでいるものです:

    .data
msg:        .asciiz "Enter the band colors\n"
band12:     .asciiz "Value bands (first 2 band colors)\n"
bandM:      .asciiz "Multiplier band\n"
bandT:      .asciiz "Tolerance band\n"
buffer:     .byte '0'
userInput:  .space 4
normalized: .word 0
tolerance:  .ascii ""

    .text
main:   li $v0, 4 
    la $a0, msg
    syscall

    la $a0, band12
    syscall

    la $t0, userInput #store the input array in a register

    li $v0, 8 #read the first input into buffer
    la $a0, buffer
    la $a1, 8
    syscall

    #store the input into the first element of the input array
    lb $t1, buffer 
    sb $t1, ($t0)

    #read the second input into buffer
    la $a0, buffer
    la $a1, 8
    syscall

    lb $t2, buffer #store the input into the second element of the input array
    sb $t2, 1($t0)

    #3rd band message
    li $v0, 4
    la $a0, bandM
    syscall

    #read in 3rd band
    li $v0, 8
    la $a0, buffer
    la $a1, 8
    syscall

    #move to 3rd array index
    lb $t3, buffer
    sb $t3, 2($t0)

    #last prompt
    li $v0, 4
    la $a0, bandT
    syscall

    #read tolerance band
    li $v0, 8
    la $a0, buffer
    la $a1, 8
    syscall

    #move to 4th array index
    lb $t4, buffer
    sb $t4, 3($t0)

    li $v0, 11
    lb $a0, ($t0)
    syscall
    lb $a0, 1($t0)
    syscall
    lb $a0, 2($t0)
    syscall
    lb $a0, 3($t0)
    syscall

    jr $ra

    li $v0, 10
    syscall

これは QtSpim からの出力です。 ここに画像の説明を入力

4

1 に答える 1

2

あなたがスピムを使用していると仮定します:

$a1引数syscall 8は、読み取る文字数です。コードは$a18 に設定され、最大 9 バイトを読み取ることができますが、バッファーは 1 バイトしかありません。を使用して、バッファーを 32 ビット境界に揃える必要がある場合もあります.align 2

于 2013-04-22T22:28:21.650 に答える