0

私は回避できないように見える小さな問題を抱えています。次の方法でスタックにいくつかの数値が格納されています。

|5|   0($sp)
|4|   4($sp)
|3|
|8|

一度に 2 つの数値を比較して、スタックを走査したいと考えています。つまり、0($sp) を 4($sp) と比較し、次に 0($sp) を 8($sp) と比較し、...、そして 4($sp) と 8($ sp)。つまり、5 対 4、5 対 3、5 対 8、4 対 3、4 対 8、3 対 8 です。

これに対する私の試みは

lw $t3, 0($sp) ##
la $t4, 4($sp) ##
Sum2:
    beq $t2, $zero, Exit
    lw $t5, $t4  ##

    add $a0, $t5, $zero
    li $v0, 1
    syscall 
    add $t4, $t4, 4
    addi $t2, $t2, -1
    j Sum2

主に1行目、2行目、5行目。スタックの一番上にある整数値を $t3 にロードし、スタック内の次の項目のアドレスを $t4 にロードしています。

次に、$t4 に格納されているアドレスに値をロードし、比較を行い (現在は印刷できるようにゼロに加算しています)、t4 に格納されているアドレスを 4 バイト増やして 3 番目の項目を取得します。スタックで。レジスタ値が 0 になるまでこれを続けます。これが発生したら、$sp を 4 ずつ増やして、プロセスを繰り返します。

これを PCSpim にロードしようとすると、常に構文エラーが発生します。私は何を間違っていますか?

4

1 に答える 1

2

私があなたの問題を正しく読んでいるなら、あなたは望む

lw $t5, 0($t4)

$t4 が指す場所に格納された値を t5 にロードします。

于 2012-01-28T20:26:17.720 に答える