1
.global reverse
.data
start: .word 1
end: .word 1
loopcount: .word 0
reverse:
ldr r3, =end
str r1, [r3]
next:
ldr r3,=end
ldr r2,=start
ldr r3, [r3]
ldr r2, [r2]
cmp r2,r3
bgt done
cmp r2,r3
beq done
sub r3,r2
mov r2,#0
mov r1,#0
loop:
cmp r2,r3
beq next2
add r2, r2, #1
add r1, r1, #4
b loop
next2:
ldr r3, [r0]
add r0, r0, r1
ldr r2, [r0]
str r3, [r0]
sub r0, r0, r1
str r2, [r0]
add r0, r0, #4
ldr r3,=end
ldr r1, [r3]
sub r1, r1, #1
str r1, [r3]
ldr r3,=start
ldr r1, [r3]
add r1, r1, #1
str r1, [r3]
b next
done:
bx lr
私は配列を逆にしようとしています。これはアセンブリーの逆関数です。関数はreverse(int data *、size)です。データは配列で、サイズはサイズです。これはサイズ5の任意の配列で動作しますが、サイズ10のような長い配列の場合は最後の2を無視し、配列のサイズが8であるかのように動作し、配列の最後の2つの数字がそれが返されます:アセンブリ、私のコードで何が問題なのかわかりませんARMプロセッサ
Array:
1 2 3 4 5 6 7 8 9 10
My Return:
8 7 6 5 4 3 2 1 9 10
私の問題は何か分かりません。
私も、なぜあなたのコードを見つけることができないよう私にとっては非常に複雑で、すべてのメモリ変数に加えて、時々動作します。しかし、デバッガはそれが何をするかを示すことができます。私はサイズ0,1,2の配列から始めたいと思います。サイズ10よりも早く予期せぬことが起こるはずです。(また、出力だけを見ないで、1つの命令ステップごとに見てください。本当に何ですか?起こっています。あなたがそれを書いているときにコードがうまく動作しなくても、ちょうど幸運な事故によって正しい出力を得ることができます) – Ped7g