多くのアセンブリ言語は、CMP
(したがって「等しい」)のような比較命令の後によくあるBEQ
型命令を持っています。
しかし、比較はしばしば「減算するが結果を捨てる」ため、ゼロフラグが設定されている場合、BEQ
は単に分岐します。しかし
; basically: for (reg1 = 0; reg1 != reg2; reg1++)
load reg1, 0
startloop:
cmp reg1, reg2 ; pretend subtract reg1 - reg2
beq endloop ; zero flag set means they were equal
: :
inc reg1
bra startloop
endloop:
、あなたがに制限されていないだけで比較、何も設定しています。あなたが見る傾向があるものを言い換える
は、(いくつかの神話の擬似アセンブラコード内)のようなものです関連するフラグのような、使用することができます
あなたの特定のケースで
load reg1, [memaddr] ; loading zero from memory
dec reg3 ; decrementing if we go 1 -> 0
、STR
は実際コンディを変更しませんブランチに影響を及ぼすのはADDS
です(実際には、ADD
はこれを指定しないので、これを指定するのはS
という接尾辞です)。
ADDS R2, R2, #200
の結果(最終結果がR2
)が0の場合、ブランチが作成されます。
初期値はFFFFFF38h
であり、あなたが200
(C8h
)を追加した場合、実際の場合になります。
FFFFFF38
C8 +
--------
(1)00000000 =