0

プログラムの概要: 1 ~ 26 の数字を入力し、対応する大文字にも数字を付けます

私の論理: .byte と chars を使用して、配列型の「構造」を設定します。配列を通過するカウンターがあります。カウンターが入力数値と同等になると、配列の現在のポイントが出力されます。

これは宿題なので、答えを「微調整」しようとしているわけではありませんが、ガイダンスは非常に役立ちます.

これが、私が間違っていると思う理由です。アドレスに 1 を追加すると、何らかの理由でエラーが発生します。しかし、4を追加するとうまくいきますか?char は正しい 1 ビットのみを使用することになっていますか? 配列内のintのアドレスにインデックスを付けるときは、4である必要があることを理解しています.

    .data
prompt: .asciiz "Enter the value of n here: "
larray: .byte 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
    .globl main
    .text

main:
    la  $t1, larray # Loads Array addresss into $t1
    li  $v0, 4      # System call for Print String
    la  $a0, prompt # Load address of prompt into $a0
    syscall         # Print the prompt message
    li  $v0, 5      # System call code for Read Integer
    syscall         # Read N into $v0
    move    $t3, $v0
    li  $t0, 0      # Loads int 0 into $t0



loop:
    beq     $t0, $t3, end   # Break
    lw  $a0, ($t1)  # Loads current pointer


    addi    $t0, $t0, 1 # Adds one to $t0 (Counting up +1)
    addi    $t1, $t1, 1 # Advances to next address in the array

    j   loop


end:
    li  $v0, 11     # Print at current index
    syscall

    li  $v0, 10     # return control to system
    syscall

別の方法で char にアクセスする方法について調査しましたが、ハードコーディングする必要があるため、この方法を実装できるとは思いませんか? リンク: これは私が見つけたスタック リンクです。

4

1 に答える 1

1

配列やループは必要ありません。1 ~ 26 の範囲内の単一の数字に対応する大文字を見つけたいだけであれば、これで十分です。

li  $v0, 5       # System call code for Read Integer
syscall          # Read N into $v0
addiu $v0,$v0,'A'-1  # Convert the number 1-26 to the character 'A'-'Z'

char は正しい 1 ビットのみを使用することになっていますか?

1バイト

アドレスに 1 を追加すると、何らかの理由でエラーが発生します。しかし、4を追加するとうまくいきますか?

1ワード(4 バイト)lwをロードする命令を使用しています。1 バイトをロードするには、or命令を使用します (は符号付きバイトの場合、符号なしの場合は )。lblbulblbu

于 2013-09-17T07:12:02.387 に答える