2009-04-22 14 views
2

私はちょうどMIPSアセンブリを傾け始めています、そして、私は単純なwhileループを書こうとしています。これは、Cコードにequivilentされます。MIPSアセンブリのアドレスをインクリメントする方法は?

int A[5];

for(i=0;i<5;i++) A[i]=i;

だから、私はwhileループを作るためにbeqを使用することができます知っているが、私はメモリアドレスを毎回インクリメントする方法がわかりません次のレジスタに移動します。私はおそらくsltオペランドが役に立つかもしれないと思うが、私は知らない。

答えて

2

[]

lis $4 
.word 4 
lis $5 
.word 1 
add $7, $4, $5 ;$7 = 5 
add $6, $0, $0 ;$6 = 0 

loop: 
sw $6, 0($3) 
add $3, $4, $3 ;point to next "int" 
add $6, $5, $6 ;add 1 to our counter 
bne $7, $6, loop ;we will stop at 5 
+0

に$ 3ポイントと仮定すると、これはたったの$ 3でループの各反復したものを上書きしませんか? – blueintegral

+0

実際には、私は間違った構文を持っています。だから、私は2つのレジスタを反転した。 "sw"はどんなレジスタにも上書きされませんが、単に括弧で囲んだレジスタが指し示す位置に書き込みます。 – Verhogen

0
.data 

A: .space 20 #declared 20 bytes of storage to hold array of 5 int 

__start: 
     lw   $t0, A #load base address of array 
     li   $t1, 0 
loop: sw   $t1($t0), $t1 
     addi  $t1, $t1, 4 
     ble   $t1, 20, loop 
#continue code or simple exit after this 
+0

それはコンパイルされません。 ループ:sw $ t1($ t0)、$ t1 - > "(":オペランドのタイプが間違っています – Samsky

関連する問題