Bildung einer physikalischen Adresse:
Segmentadresse (Bit 15-0) | Segmentadresse = Segmentanfang |
Segmentadresse * 16 (Bit 19-0) | Verschiebung Segmentregister im Adressrechenwerk |
plus Offsetadresse (Bit 15-0) | Offsetadresse = Distanz (Offset) vom Segmentanfang |
gleich physikalische Adresse (Bit 19-0) | auf Adressbus des Rechners |
Merke: Physikalische Adresse := Segmentadresse * 16 + Offsetadresse
Adressbereich: 220 Bytes = 1 MB
CS: Codesegment; Segmentadresse
IP: Instruction Pointer, Befehlszeiger; Offsetadresse
IP zeigt gemeinsam mit CS auf den nächsten auszuführenden Befehl
ADD AX,BX (AX:=AX+BX)
0 |
1 |
D |
8 |
Maschinensprache |
00000001xxxxxxxx |
Addiere Wörter | |||
xxxxxxxx11xxxxxx |
Zwei Registeroperanden | |||
xxxxxxxxxx011xxx |
Quellregister BX | |||
xxxxxxxxxxxxx000 |
Zielregister AX |
SUB AX,BX (AX:=AX-BX)
2 |
9 |
D |
8 |
Maschinensprache |
00101001xxxxxxxx |
Subtrahiere Wörter | |||
xxxxxxxx11xxxxxx |
Zwei Registeroperanden | |||
xxxxxxxxxx011xxx |
Quellregister BX | |||
xxxxxxxxxxxxx000 |
Zielregister AX |
AX | Register | |||
1. Hexziffer | 2. Hexziffer | 3. Hexziffer | 4. Hexziffer | |
AH | AL | Halbregister |
ADD AL,BL (AL:=AL+BL)
0 |
0 |
D |
8 |
Maschinensprache |
00000000xxxxxxxx |
Addiere Bytes | |||
xxxxxxxx11xxxxxx |
Zwei Registeroperanden | |||
xxxxxxxxxx011xxx |
Quellregister BL | |||
xxxxxxxxxxxxx000 |
Zielregister AL |
ADD AH,BH (AH:=AH+BH)
0 |
0 |
F |
C |
Maschinensprache |
00000000xxxxxxxx |
Addiere Bytes | |||
xxxxxxxx11xxxxxx |
Zwei Registeroperanden | |||
xxxxxxxxxx111xxx |
Quellregister BH | |||
xxxxxxxxxxxxx100 |
Zielregister AH |
Debug kann Halbregister nicht modifizieren
F |
7 |
E |
3 |
Maschinensprache |
11110111xx100xxx |
Vorzeichenlose Wort-Multiplikation | |||
xxxxxxxx11xxxxxx |
Multiplikator im Register | |||
xxxxxxxxxxxxx011 |
BX-Register |
DIV BX (AX:=DX:AX div BX, DX:=DX:AX mod BX)
Vor der Division:
DX: Bits 31-16 des Dividenden, AX: Bits 15-0 des Dividenden
DX und AX bilden ein Registerpaar (DX:AX)
Nach der Division:
AX: Ganzzahliges Divisionsergebnis, DX: Ganzzahliger Divisionsrest
F |
7 |
F |
3 |
Maschinensprache |
11110111xx110xxx |
Vorzeichenlose Wort-Division | |||
xxxxxxxx11xxxxxx |
Divisor im Register | |||
xxxxxxxxxxxxx011 |
BX-Register |
00 | xxxx:yyyy |
01 | xxxx:yyyy |
... | xxxx:yyyy |
1F | xxxx:yyyy |
20 | xxxx:yyyy |
21 | xxxx:yyyy |
22 | xxxx:yyyy |
... | xxxx:yyyy |
FE | xxxx:yyyy |
FF | xxxx:yyyy |
Interruptnummer | Adresse der Interruptserviceroutine |
INT 21 (DOS-Funktionsaufruf)
C |
D |
2 |
1 |
Maschinensprache |
11001101xxxxxxxx |
Softwareinterrupt | |||
xxxxxxxx00100001 |
Interruptnummer |
INT 20 (Programmende, nur COM-Format !)
C |
D |
2 |
0 |
Maschinensprache |
11001101xxxxxxxx |
Softwareinterrupt | |||
xxxxxxxx00100000 |
Interruptnummer |
Diverse Adressierungsarten
Einfachste Adressierungsart: Direktoperand (Der Operand ist Bestandteil des Befehls)
Hinweis: Diese DOS-Funktion modifiziert irrtümlich das AL-Register !