1

私はMIPSに書いたCプログラムを翻訳する宿題に取り組んでいます。私の質問は一般的なMIPSコーディングについてであり、プロジェクト固有の問題ではありません。出力の印刷で問題が発生しました。私はそのように宣言された配列と出力文字列を持っています:

array: .word 7, 2, 5, -3, 3, 6, -4, 1  
output1: .asciiz "Array: \0"

データを出力しようとしているので、次の形式になっています。

Array: 7 2 5 -3 3 6 -4 1

配列はハードコーディングされており、配列の長さは事前に決定されています。効率よく印刷するためのループを考えてみましたがlw、レジスターを使ってオフセットを処理するのが問題でした。
出力をハードコーディングするために次のコードを考え出しましたが、印刷する必要のある別の配列がまだあります。これは、かなりのスペースを占めているようです。私のコードは完全に機能していますが、それはただの混乱です!誰かがそれをクリーンアップ/リファクタリングするためのヒントを教えてもらえますか?
配列はに格納され$a0/$s0、配列サイズはに格納されます$a1/$s1

la $a0, output1 # print the "Array: " string
li $v0, 4
syscall

# Huge Oversized Print Statement to print out the original Array: 
li $v0, 1 # print the array
lw $a0, 0($s0)
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
li $v0, 1
lw $a0, 4($s0)
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 8($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 12($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 16($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 20($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 24($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 28($s0)
li $v0, 1
syscall

これは宿題のプロジェクトであり、配列を印刷するためのよりクリーンな方法を完全に理解したいと思っています。盗用するつもりはありません。ループを書くためのヒントは大歓迎です。私はコードを教えてくれる人を探していません。

4

1 に答える 1

4

オフセットを手動で変更する代わりに、 をインクリメントすると役立つ場合があります。そのように、常に を使用して$s0います。addilw 0($s0)

$s0編集:ループ内でインクリメントしていることを追加する必要があると思います(ループjに使用)。

于 2009-11-10T19:06:21.313 に答える