18.12.2012 Aufrufe

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!