Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 001 di 198] 

    

    AAA - Aggiustamento Ascii dopo l'Addizione
     
bulletQuesta istruzione è dedicata alla trasformazione del contenuto di AL, inteso come risultato della somma di 2 bytes (rigorosamente di tipo 0xH, cioè con i 4 bit più significativi a 0 e con un codice BCD nei rimanenti, rappresentati dal nibble x) in un numero BCD non impacchettato (cioè formato da 2 bytes, ciascuno ancora di tipo 0xH), lasciato nei 2 registri AH (decine) e in AL (unità).
    
Ricorda... NB: il risultato è significativo solo se AL  è compreso tra 00H e 12H (=18 decimane, somma di 2 numeri ciascuno di valore massimo 09H) e se AH vale 00H; entrambi i bytes addendi devono avere valore rigorosamente compreso tra 00H e 09H.
     
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):
         
     AAA
 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

AAA

 

8 3 4 3 no 1 ?       ? ? # ? #
         
Suggerimento Ricordiamo che:
il nibble esprime un numero binario a 4 bit, di solito associato ad uno dei 16 elementi del sistema di numerazione esadecimale: per esempio 0000 > 0, 0001 > 1, ... , 1010 > A, .... , 1111 > F.
un codice BCD associa invece un numero binario a 4 bit ad uno dei 10 elementi del sistema di numerazione decimale; per questo le parole del codice sono dieci: 0000 > 0, 0001 > 1, ... , 1001 > 9.
     
bulletSupponendo che il valore lasciato in AL sia il risultato esadecimale della somma di 2 bytes di valore compreso tra 00H e 09H, questa istruzione ne modifica il contenuto in funzione del fatto che la somma, trattata come fosse decimale ...
bullet ...non produca riporto (per esempio con AL=08+01=09H o AL=05+03=08H), ma anche se ha lasciato la flag A (Auxiliary Carry) a 1:
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
bulletil registro AH rimane inalterato.
bulletle flag A (Auxiliary Carry) e C (Carry) sono poste entrambe a 0.
     

-R
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 B008   MOV AL,08
-T
AX=0008 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0102 NV UP EI PL NZ NA PO NC
1192:0102 0401   ADD AL,01
-T
AX=0009 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0104 NV UP EI PL NZ NA PE NC
1192:0104 37     AAA
-T
AX=0009 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 PE NC
1192:0105

     
bullet...generi un riporto (per esempio AL=08+04=0CH o AL=09+09=12H):  
bulletad AL viene sommato 6, nei nostri esempi 0C+06=12H o 12+06=18; naturalmente la somma modifica anche i 4 bit più alti, ma di essi non ci importa, dato che saranno azzerati, come vedremo tra poco.
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.
bulletil registro AH viene incrementato.
bulletle flag A ( Auxiliary Carry) e C ( Carry) sono poste entrambe a 1.
     

-R
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 B008   MOV AL,08
-T
AX=0008 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0102 NV UP EI PL NZ NA PO NC
1192:0102 0404   ADD AL,04
-T
AX=000C BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0104 NV UP EI PL NZ NA PE NC
1192:0104 37     AAA
-T
AX=0102 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 AC PE CY
1192:0105

     

-R
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 B008   MOV AL,09
-T
AX=0009 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0102 NV UP EI PL NZ NA PO NC
1192:0102 0404   ADD AL,09
-T
AX=0012 BX=0000 CX=0000 DX=0000 SP=ED5D BP=0000 SI=0000 DI=0000
DS=1192 ES=1192 SS=1192 CS=1192 IP=0104 NV UP EI PL NZ AC PE NC
1192:0104 37     AAA
-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=0105 NV UP EI PL NZ AC PE CY
1192:0105

     
bulletNaturalmente l'azione di AAA viene eseguite nei termini spiegati anche se usata in modo improprio, direttamente su qualunque valore fatto trovare in AH e AL prima di eseguirla; in questo caso la sua utilità sembra piuttosto precaria: gli esempi successivi mostrano come la logica descritta sia applicata alla lettera.
     

AX=3579 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 37     AAA
-T
AX=3509 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=68AC 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 PE NC
1192:0106 37     AAA
-T
AX=6902 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 AC PE 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 001 - AAA

    

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