6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
6. Funktionseinheiten eines Computers / Mikrocomputers
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Rechnergrundlagen Teil 2 - 19 - Prof. Dipl.-Ing. Komar<br />
Arithmetische Befehle ADD – SUB – MUL – DIV–CMP–INC–DEC<br />
Alle arithmetischen Befehle arbeiten mit Ganzzahl-Operanden ( 8 Bit, 16 Bit oder 32 Bit)<br />
Bei Additions- und Subtraktionsbefehlen braucht hinsichtlich vorzeichenloser oder vorzeichenbehafteter<br />
Dualzahlen ( Zweierkomplementdarstellung negativer Zahlen ) nicht unterschieden werden.<br />
Ein Überschreiten des jeweiligen Zahlenbereiches wird für vorzeichenlose Dualzahlen im C-Flag (Carry )<br />
und für vorzeichenbehaftete im O-Flag (Overflow ) des Flagregisters F ( Statusregister ) angezeigt.<br />
ADD op1 , op2 op1 = op1 + op2 ADD AX, DX<br />
ADC op1 , op2 op1 = op1 + op2 + Carry-Bit ADC CH, BYTE PTR [BX+2]<br />
SUB op1 , op2 op1 = op1 – op2 SUB [1000], BX<br />
SBB op1 , op2 op1 = op1 – op2 – Carry-Bit SBB DH, 4F<br />
CMP op1 , op2 Testsubtraktion op1 – op2 ohne verändern von Operanden zum Setzen der Statusflags<br />
INC op1 op1 = op1 + 1 das Carryflag wird nicht verändert INC BYTE PTR [BX+2]<br />
DEC op1 op1 = op1 – 1 das Carryflag wird nicht verändert DEC WORD PTR [1000]<br />
bei op1 und op2 sind alle Byte und Wortoperanden zulässig.<br />
Die Multiplikations- und Divisionsbefehle gelten nur für den Akkumulator AX und das DX-Register als Hilfs-<br />
register. Es sind keine Konstanten als Operanden möglich.<br />
MUL byte AX = AL * Byteregister oder Speicherbyte MUL BYTE PTR [1000]<br />
MUL wort (DX+AX) = AX * Wortregister oder Speicherwort MUL WORD PTR [BX+1]<br />
DIV byte AL = AX / Byteregister oder Speicherbyte AH = Rest DIV CL<br />
DIV word AX = (DX + AX ) / Wortregister o. Speicherwort DX = Rest DIV CX<br />
MUL und DIV funktionieren richtig nur bei vorzeichenlosen Dualzahlen. Nach DIV sind die Arithmetikflags<br />
undefiniert und nach MUL zeigen C = O =1 an, daß AH oder DX signifikante Ergebnisstellen beeinhalten.<br />
Unmittelbare Adressierung mit Konstanten im Befehl ist bei MUL / IMUL und DIV / IDIV nicht möglich<br />
Für das Rechnen in vorzeichenbehafteten Zahlensystemen mit vorzeichenbehafteten Operanden sind die<br />
folgenden Befehle vorgesehen:<br />
IMUL byte AX = AL * Byteregister oder Speicherbyte IMUL AL<br />
IMUL word (DX+AX) = AX * Wortregister oder Speicherwort IMUL WORD PTR [101]<br />
IDIV byte AL = AX / Bytergister o. Speicherbyte AH = Rest IDIV BYTE PTR [BX+1]<br />
IDIV word AX = (DX + AX) / Wortreg. o. Speicherwort DX = Rest IDIV CX<br />
NEG operand Negiere den Operanden ( Zweierkomplement ) NEG AX<br />
CBW Lade AH mit dem Vorzeichenbit von AL 8 -> 16 Bit Bereichserweiterung von<br />
CWD Lade DX mit dem Vorzeichenbit von AX 16 -> 32 Bit vb. Dualzahlen<br />
DIV und IDIV liefern ein ganzzahliges Ergebnis mit Teilerrest, wobei dieser Teilerrest ganzzahlig und mit<br />
dem Vorzeichen des Dividenden (1.Operand) dargestellt wird. Überschreitet der Quotient die Kapazität des<br />
Zielregisters ( AL oder AX ) oder erfolgt eine Division durch Null, so wird der Interrupt INT 0 ausgelöst<br />
(Fehlermeldung)<br />
Dezimale arithmetische Operationen (BCD-Arithmetik)<br />
Diese Befehle führen Anpassungen und Korrekturen für die BCD-Arithmetik durch. Diese sollten vor oder nach<br />
den binären arithmetischen Operationen durchgeführt werden, wobei das Zielregister immer der Akku AL / AX<br />
sein muß, denn die nachfolgenden Korrekturoperationen beziehen sich immer auf AL / AX.<br />
DAA Dezimalkorrektur zweier gepackter Dezimalziffern in AL nach Addition<br />
DAS Dezimalkorrektur zweier gepackter Dezimalziffern in AL nach Subtraktion<br />
AAA Dezimalkorrektur in AL nach der Addition ungepackter Dezimalziffern, höherwertiges Nibble = 0<br />
Bei einem Übertrag (größer 9 ) wird AH inkrementiert.<br />
AAS Dezimalkorrektur in AL nach der Subtraktion ungepackter Dezimalziffern, höherwertiges Nibble = 0<br />
Bei einer negativen Differenz wird das AH-Register dekrementiert<br />
AAM Korrigiert das AX-Register nach einer dualen Byte-Multiplikation, so daß eine zweistellige<br />
ungepackte Dezimalzahl in AX entsteht. ( AH = AL / 10 d AL = Rest )<br />
AAD Vorbereitung einer dezimalen Byte-Division mit dem Befehl DIV. Umwandlung einer ungepackten<br />
BCD-Zahl in AX in eine Dualzahl in AL. Multipliziert AH mit 10 d und addiert dies zu AL. Setzt<br />
danach AH auf 0.