Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 004 di 198] 

    

    AAS - Aggiustamento Ascii dopo la Sottrazione
     
bulletQuesta istruzione è dedicata alla trasformazione del contenuto di AX, inteso come risultato della sottrazione di 2 numeri BCD, il primo non impacchettato (per esempio 0909H o 0102H, cioè formato da 2 bytes di tipo 0xH, cioè con i 4 bit più significativi a 0 e con un codice BCD nei rimanenti, rappresentati dal nibble x) e il secondo normale a 8 bit, sempre di tipo 0xH; il risultato è ancora un numero BCD non impacchettato, lasciato nei 2 registri AH (decine) e in AL (unità).
    
Ricorda... NB: il risultato è significativo solo se entrambi i bytes dei 2 operandi hanno valore rigorosamente compreso tra 00H e 09H (e se, naturalmente il minuendo è maggiore del sottraendo).
     
bulletLa definizione non è molto calzante in quanto, come anticipato, l'aggiustamento imposto non è Ascii, ma decimale.
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
     AAS
 AH   <<   AH - 1    o     AH
 AL   <<   (AL - 6) AND  0FH    o     AL  AND  0FH
 

Esempio di Applicazione

Cicli di Clock Mem
Acces

Bytes
Flag   influenzate
Mnemonico Operandi 86 268 386 486 O D I T S Z A P C

AAS

 

8 3 4 3 no 1 ?       ? ? # ? #
         
bulletSupponendo 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 ...
bullet ...non abbia bisogno di prestito (per esempio con AL=06-05=01H o AL=09-08=01H):
bulletil 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).
bulletil nibble alto di AL viene forzato a 0000 (ma già doveva essere a questo valore).
bulletil registro AH rimane inalterato.
bulletle 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

     
bullet...generi la richesta di prestito dal byte precedente (per esempio AL=08-09=FFH (= -1) o AL=06-08=FEH (= -2)):  
bulletad AL viene sottratto 6, nei nostri esempi FFH+06H=F9H e FEH+06H=F8H.
bulletil nibble basso di AL è dunque di nuovo un codice BCD, in stretto accordo con l'aggiustamento decimale prodotto.
bulletil nibble alto di AL viene forzato a 0000 (nei nostri esempi AL=F9H diventa AL=09H e AL=F8H diventa AL=08H ).
bulletil registro AH viene decrementato.
bulletle 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 

     
bulletL'azione di AAS non è garantita se entrambi gli operandi della sottrazione sono BCD non impacchettati (cioè entrambi a 16 bit); gli esempi confermano la validità dell'aggiustamento solo se il nibble basso del minuendo è maggiore di quello del sottraendo:.
     

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 B80708  MOV AX,0807
-t
AX=0807 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 2D0505  SUB AX,0505
-t
AX=0302 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 3F     AAS
-t
AX=0302 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0107 NV UP EI PL NZ NA PO NC
1192:0107

     

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 B80708  MOV AX,0807
-t
AX=0807 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 2D0907  SUB AX,0709
-t
AX=00FE 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 NC
1192:0106 3F     AAS
-t
AX=FF08 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0107 NV UP EI NG NZ AC PO CY
1192:0107         

    

Pagina Precedente Scheda n° 07 Pagina Successiva Istruzioni Cpu 80x86 Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Istruzione 004 - AAS

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati