| Supponendo che il valore lasciato in AL
sia il risultato esadecimale della
sottrazione di 2 bytes di valore compreso tra 00H
e 09H, questa istruzione ne modifica il contenuto
in funzione del fatto che la sottrazione, trattata come
fosse decimale ...
| ...non abbia
bisogno di prestito (per
esempio con AL=06-05=01H o
AL=09-08=01H):
| il nibble basso di AL viene lasciato
inalterato, dato che esprime già il codice BCD corretto, tra
0000 (associato al decimale 0) e 1001 (associato al decimale
9). |
| il nibble alto di AL viene forzato a
0000 (ma già doveva essere a questo valore). |
| il registro AH rimane inalterato. |
| le flag A (Auxiliary Carry)
e C (Carry)
sono poste entrambe a 0. |
|
AX=0000 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0100 NV UP EI
PL NZ NA PO
NC
1192:0100 B80603 MOV AX,0306
-T
AX=0306 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0103 NV UP EI
PL NZ NA PO
NC
1192:0103 2C05 SUB AL,05
-T
AX=0301 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0105 NV UP EI
PL NZ NA PO
NC
1192:0105 3F
AAS
-T
AX=0301
BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0106 NV UP EI
PL NZ NA
PO NC
1192:0106
|
AX=0000
BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0100 NV
UP EI PL NZ NA
PO NC
1192:0100 B80909 MOV AX,0909
-T
AX=0909
BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0103 NV
UP EI PL NZ NA
PO NC
1192:0103 2C08 SUB AL,08
-T
AX=0901
BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0105 NV
UP EI PL NZ NA
PO NC
1192:0105 3F
AAS
-T
AX=0901
BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0106 NV
UP EI PL NZ NA
PO NC
1192:0106
|
| ...generi la
richesta di prestito dal byte precedente
(per esempio AL=08-09=FFH
(= -1) o
AL=06-08=FEH
(= -2)):
| ad AL viene
sottratto 6, nei nostri esempi FFH+06H=F9H
e FEH+06H=F8H. |
| il nibble basso di AL
è dunque di nuovo un codice BCD, in stretto accordo con
l'aggiustamento decimale prodotto. |
| il nibble alto di AL viene forzato a
0000 (nei nostri esempi AL=F9H
diventa AL=09H
e AL=F8H
diventa AL=08H
). |
| il registro AH viene
decrementato. |
| le flag A (
Auxiliary Carry) e C ( Carry)
sono poste entrambe a 1. |
|
AX=0000 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0100 NV UP EI
PL NZ NA PO
NC
1192:0100 B80801 MOV AX,0108
-T
AX=0108 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0103 NV UP EI
|
AX=0000 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0100 NV UP EI
PL NZ NA
PO NC
1192:0100 B80603 MOV AX,0306
-T
AX=0306 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0103 NV UP EI
PL NZ NA
PO NC
1192:0103 2C08 SUB AL,08
-T
AX=03FE BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0105 NV UP EI
NG NZ AC PO
CY
1192:0105 3F
AAS
-T
AX=0208
BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0106 NV UP EI
PL NZ AC PO
CY
1192:0106
|
|