Zeichen | ASCII-Code |
0 | 30 |
1 | 31 |
2 | 32 |
3 | 33 |
4 | 34 |
5 | 35 |
6 | 36 |
7 | 37 |
8 | 38 |
9 | 39 |
: | 3A |
; | 3B |
< | 3C |
= | 3D |
> | 3E |
? | 3F |
@ | 40 |
A | 41 |
B | 42 |
C | 43 |
D | 44 |
E | 45 |
F | 46 |
Nach Zahlengruppen (0-9 und A-F) getrennte Konvertierung
IF BL <= 09
THEN BL := BL+30 Zahlengruppe 0-9
ELSE BL := BL+37 Zahlengruppe A-F
END-IF
Die 8086-Maschinensprache enthält kein IF-THEN-ELSE sondern nur IF-THEN oder IF-ELSE
BL := BL+30 beide Zahlengruppen
IF BL <= 39
ELSE BL := BL+07 nur Zahlengruppe A-F
0100 MOV AH,02 0102 MOV DL,BL 0104 ADD DL,30 0107 CMP DL,39 010A JBE 010F 010C ADD DL,07 010F INT 21 0111 INT 20Sinnvolle Testfälle: 0,9,A,F (Grenzfälle)
SHR DX,1 Register
SHR DL,1 Halbregister
SHR DX,CL Register
SHR DL,CL Halbregister
SHL DX,1 Register
SHL DL,1 Halbregister
SHL DX,CL Register
SHL DL,CL Halbregister
CL enthält die Anzahl der Verschiebungen
DL-Register | |
01011010 |
Ausgangszustand |
00101101 |
nach SHR DL,1 |
00010110 |
nach SHR DL,1 |
00001011 |
nach SHR DL,1 |
00000101 |
nach SHR DL,1 |
00000010 |
nach SHR DL,1 |
00000001 |
nach SHR DL,1 |
00000000 |
nach SHR DL,1 |
00000000 |
nach SHR DL,1 |
DL-Register | |
01011010 |
Ausgangszustand |
10110100 |
nach SHL DL,1 |
01101000 |
nach SHL DL,1 |
11010000 |
nach SHL DL,1 |
10100000 |
nach SHL DL,1 |
01000000 |
nach SHL DL,1 |
10000000 |
nach SHL DL,1 |
00000000 |
nach SHL DL,1 |
00000000 |
nach SHL DL,1 |
SHR Operand,... vorzeichenlose Division
SHL Operand,... vorzeichenlose Multiplikation
0100 MOV AH,02 0102 MOV DL,BL 0104 MOV CL,04 0106 SHR DL,CL 0108 ADD DL,30 010B CMP DL,39 010E JBE 0113 0110 ADD DL,07 0113 INT 21 0115 INT 20
AND | 0 | 1 |
0 | 0 | 0 |
1 | 0 | 1 |
AND auf Bytes oder Wörter durch bitweise Verknüpfung. Nullsetzen der höherwertigen 4 Bit (linke Tetrade) eines Bytes:
0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | |
AND | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
= | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
0100 MOV AH,02 0102 MOV DL,BL 0104 AND DL,0F 0107 ADD DL,30 010A CMP DL,39 010D JBE 0112 010F ADD DL,07 0112 INT 21 0114 INT 20
AH=08: Funktionscode
AL=nn: ASCII-Code nn des eingelesenen Zeichens (ohne Echo auf Standardeingabe)
Spezialfall: DOS sendet zwei Zeichen in den Tastaturpuffer bei Sondertasten mit erweiterten Codes. Der ASCII-Code des ersten Zeichens beträgt Null, der ASCII-Code des zweiten Zeichens repräsentiert den Scancode der Sondertaste. Bei AL=0 muss INT 21 also erneut ausgeführt werden.
BL := BL-30 beide Zahlengruppen
IF BL <= 09
ELSE BL := BL-07 nur Zahlengruppe A-F
0100 MOV AH,01 0102 INT 21 0104 SUB AL,30 0106 CMP AL,09 0108 JBE 010C 010A SUB AL,07 010C INT 20
Mit CALL wird die Rücksprungadresse auf den Stack gelegt, und mit RET wird die Rücksprungadresse vom Stack genommen. Die Speicherung der Rü:cksprungadressen auf dem Stack erleichtert die Erstellung verschachtelter Unterprogramme:
Stack nach Befehlsausführung | 109 | 209 109 |
309 209 109 |
209 109 |
109 | |
Befehl | CALL 0200 | CALL 0300 | CALL 0400 | RET | RET | RET |
Sicherung der Register am Unterprogrammanfang und Restaurierung der Register am Prozedurende bedeutet, das die Register in dem Unterprogramm als lokale Variablen zur Verfügung stehen.
Stack nach Befehlsausführung | 0103 | AX 0103 |
DX AX 0103 |
AX 0103 |
0103 | 0106 | 0203 0106 |
AX 0203 0106 |
DX AX 0203 0106 |
AX 0203 0106 |
0203 0106 |
0106 | 0206 0106 |
0303 0206 0106 |
AX 0303 0206 0106 |
DX AX 0303 0206 0106 |
AX 0303 0206 0106 |
0303 0206 0106 |
0206 0106 |
0306 0206 0106 |
0403 0306 0206 0106 |
AX 0403 0306 0206 0106 |
DX AX 0403 0306 0206 0106 |
AX 0403 0306 0206 0106 |
0403 0306 0206 0106 |
0306 0206 0106 |
0206 0106 |
0309 0206 0106 |
AX 0309 0206 0106 |
DX AX 0309 0206 0106 |
AX 0309 0206 0106 |
0309 0206 0106 |
0206 0106 |
0106 | 0209 0106 |
AX 0209 0106 |
DX AX 0209 0106 |
AX 0209 0106 |
0209 0106 |
0106 | 0109 | AX 0109 |
DX AX 0109 |
AX 0109 |
0109 | |||
Befehl | CALL 500 | PUSH AX | PUSH DX | POP DX | POP AX | RET | CALL 200 | CALL 510 | PUSH AX | PUSH DX | POP DX | POP AX | RET | CALL 300 | CALL 520 | PUSH AX | PUSH DX | POP DX | POP AX | RET | CALL 400 | CALL 530 | PUSH AX | PUSH DX | POP DX | POP AX | RET | RET | CALL 520 | PUSH AX | PUSH DX | POP DX | POP AX | RET | RET | CALL 510 | PUSH AX | PUSH DX | POP DX | POP AX | RET | RET | CALL 500 | PUSH AX | PUSH DX | POP DX | POP AX | RET |