5
私はアームアセンブリのサブルーチンを学習していますが、私は例と混同しています。 "bne Body"の前にcmp x、yは必要ないのですか?それは何を比較していますか?ARMのsssemblyで前のcmpと比較してbne分岐をどのように比較できますか?
@ Sum of the first "MAX" Fibonacci with subroutine
.text
.global _start
.equ MAX,10
_start: mov r1,#MAX
bl Fib
exit: swi 0x11 @ Terminate the program
@Subroutine to compute sum of n Fibonacci numbers
Fib: sub r1,r1,#2 @ Counter - 2
mov r2,#1
mov r3,#2
mov r0,#3
Body: add r4,r2,r3
add r0,r0,r4 @ Update Sum
mov r2,r3
mov r3,r4
Decr: subs r1,r1,#
bne Body @ If Count != 0, repeat loop
Done: mov pc,lr @ Return from subroutine
ありがとうございました。私が知っておくべきフラグ(例えば、追加)を設定する他の指示はありますか? –
はい、その多くがあります。 ALU演算(数学または論理)を行うほとんどの命令は、いくつかの条件下でフラグを設定できます。単純にデータを移動したり、プログラムの流れを分岐させる命令は、通常そうしません。確かに、どのようなフラグをどのような条件で設定できるかを知るためには、実際には指示書のドキュメントを見る必要があります。 –
"subs"命令の2番目の 's'に注意してください。これは、結果に応じてフラグが設定されていることを示します(例えば、 "sub"命令はフラグを設定しません)。 – starblue