私は回避できないように見える小さな問題を抱えています。次の方法でスタックにいくつかの数値が格納されています。
|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 にロードしようとすると、常に構文エラーが発生します。私は何を間違っていますか?