これをCコードに変換しようとしています。これは、50から始まり、ずっと下のforloopになることを知っています。しかし、私たちが途中に入るときなど、他のプロセスのいくつかで私は失われました。
addi $t1, $0, 50
LOOP: lw $s1, 0($s0)
add $s2, $s2, $s1
lw $s1, 4($s0)
add $s2, $s2, $s1
addi $s0, $s0, 8
subi $t1, $t1, 1
bne $t1, $0, LOOP
すぐに次のようになります。
t1 = 0 + 50;
LOOP:
s1 = *s0;
s2 = s2 + s1;
s1 = *s0 + 4;
s0 = s0 + 8;
t1 = t1 - 1;
if (t1 != 0) goto LOOP;
ループgoto
への変換:for
int *s0 = /* ... */;
int s2 = /* ... */;
for (t1 = 50; t1 != 0; t1--) {
s2 += *s0;
s0 += 8;
}
直接翻訳すると、次のようになります。
int32_t* s0;
int32_t i = 50;
int32_t s2;
do {
s2 += s0[j];
s2 += s0[j+1];
s0 += 2;
} while(--i);
s0 と s2 の初期値はアセンブリ コードで指定されていませんが、それを理解できると確信しています。