Download Die Assemblersprache der intel 80x86

Transcript
8.2. ADDITION UND SUBTRAKTION
Bitmuster
01111101
01111110
01111111
10000000
10000001
10000010
10000011
69
Wert dezimal
125
126
127
-128
-127
-126
-125
Tabelle 8.3: Die Bruchstelle“ zwischen positiven an die negativen Zahlen beim Überlauf am Bei”
spiel der 8-Bit-Zahlen im Zweierkomplement. Bsp.: Die Operation 127+1 führt zu dem falschen
Ergebnis -128, der Fehler wird durch das Überlaufsflag (Overflow) angezeigt.
Auch die Zweierkomplement-Zahlen können sehr schön im Zahlenring dargestellt werden, die
Bereichsüberschreitung wird hier durch das Überlaufflag angezeigt. Die Vorzeichenumkehr einer
Zahl im Zweierkomplement wird bewirkt durch Invertieren aller Bits und anschließendes Inkrementieren. Dies kann leicht gezeigt werden, wenn man von Gl.8.2 ausgeht. Es ist Z̄ das bitweise
invertiertes Z und (1 − ai ) = āi
Z̄ = −(1 − an−1 ) · 2n−1 +
n−2
X
(1 − ai ) · 2i
i=0
= −2n−1 + an−1 · 2n−1 + (2n−1 − 1) −
n−2
X
ai · 2i
i=0
= an−1 · 2n−1 −
n−2
X
ai · 2i − 1 = −Z − 1
i=0
Damit ergibt sich also für die vorzeichenumgekehrte Zahl −Z
− Z = Z̄ + 1
(8.3)
Als Beispiel betrachten wir die Vorzeichenumkehr von -11d = 11110101b; nach Invertieren ergibt
sich 00001010b und nach dem anschließenden Inkrementieren 00001011b = 11d.
8.2
Addition und Subtraktion
Die einfachsten arithmetischen Befehle sind INC (Increment) und DEC (Decrement) für die
Erhöhung und Erniedrigung um eins. INC und DEC setzen die fünf Flags OF, SF, ZF, AF und
PF. Im Unterschied zu ADD und SUB wird also CF nicht gesetzt. Beispiele:
inc cx
; erhöht cx um 1
dec [Feld+bx]
;erniedrigt eine Speichervariable um 1