Viele Assemblersprachen haben eine BEQ
-Typ-Instruktion, die oft eine Vergleichsbefehl wie folgt CMP
(daher die „gleich“).
Aber, da ein Vergleich ist oft ein „subtrahieren, aber wegwerfen das Ergebnis“ verzweigen Betrieb BEQ
wird einfach, wenn die Null Flag gesetzt ist.
Mit anderen Worten, was Sie neigen dazu, zu sehen sind Dinge wie (in einigen mythischen Pseudo-Assembler-Code):
; 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:
Sie sind jedoch nicht beschränkt auf nur Vergleiche, alles, was die Sets entsprechende Fahne könnte verwendet werden, wie zum Beispiel:
load reg1, [memaddr] ; loading zero from memory
dec reg3 ; decrementing if we go 1 -> 0
In Ihrem speziellen Fall, STR
nicht wirklich die condi ändern tionsflags, es ist die ADDS
, die den Zweig betrifft (in der Tat ist es das S
Suffix, das dies seit einem regulären ADD
nicht angibt).
Also, Endergebnis, wenn das Ergebnis Ihrer ADDS R2, R2, #200
(das Endergebnis in R2
platziert) ist Null, wird die Verzweigung genommen.
Das in der Tat der Fall sein wird, wenn der Anfangswert FFFFFF38h
ist und fügen Sie 200
(C8h
):
FFFFFF38
C8 +
--------
(1)00000000 =