Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 007 di 198] 

    

    AND - And, prodotto logico
     
bulletQuesta istruzione esegue la and logica dei 2 operandi (destinazione e sorgente). Il risultato è lasciato nell'operando di destinazione, al posto di quello di partenza.
bulletGli operandi possono avere dimensione di un byte, di una word o di una doubleword ( con 80386/486).
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
AND Destinazione, Sorgente
AND 1° dato, 2° dato
 Destinazione  <<  Destinazione AND Sorgente
 

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

AND

DX,BX

3 2 2 1 no 2 0       # ? # # 0

AND

CL,[Depo01]

 9+EA 7 6 2 1 2,4

AND

CX,[Depo02]

13+EA

AND

[Depo01],BL

16+EA 7 7 3 2 2,4

AND

[Depo02],BX

24+EA
                    

AND

SI,1234H

4 3 2 1 no 3,4

AND

[Depo01],02H

17+EA 7 7 3 2 3,6

AND

[Depo02],1234H

24+EA
                    

AND

AL,02

4 3 2 3 no 2,3
         
bulletLa tabella evidenzia le 3 tipologie degli operandi di questa istruzione:
bullettra registro e registro, o tra registro e memoria, o tra memoria e registro.
bullettra registro e costante, o tra memoria e costante.
bullettra accumulatore e costante.
bulletIl meccanismo della and logica (vedi figura) sottolinea uno degli usi più raffinati di questa istruzione: quello di mascherare alcuni bit di un determinato dato; la figura mostra chiaramente che i bit che corrispondono ai bit a 0 della maschera sono azzerati (mascherati) mentre gli altri mantengono il loro valore.
     
55H   0101 0101 AND
F0H   1111 0000  =
      -------------
50H = 0101 0000 
     
bulletSpesso questa tecnica è utilizzata per testare il valore logico di un determinato bit di un registro. Supponendo di assumere un dato a 8 bit da una periferica puntata da DX in AL, la maschera (AND) del dato ricevuto con 0000 0100 (=04H) forza a zero tutti i bit di AL meno quello sotto test, il bit2, che mantiene il suo valore.
bulletPossiamo dunque collaudare questa tecnica nei 2 modi possibili; il codice che offre questo servizio è mostrato qui di seguito: il programma continua a leggere la periferica e a mascherare il risultato con 0000 0100 (=04H), aspettando che il bit passi a 1 o a 0:
     
solo se il bit2 è assunto a 1 si potrà uscire dal loop di attesa

Addr

Codifica Masm

Istruzione

0100
0101
0103
0105
EC            
24 04
75 F9
90
bit2_0:


bit2_1:
IN    AL,DX  
AND   AL,04H
JZ    bit2_0
NOP
     
solo se il bit2 è assunto a 0 si potrà uscire dal loop di attesa

Addr

Codifica Masm

Istruzione

0100
0101
0103
0105
EC            
24 04
75 F9
90
bit2_1:


bit2_0:
IN    AL,DX  
AND   AL,04H
JNZ   bit2_1
NOP
     
bulletUn altro significativo uso di questa istruzione consiste nel rendere maiuscole le lettere minuscole; questa esigenza è molto sentita nella lettura della tastiera dato che è pressocché impossibile prevedere se lo switch CapsLock (il tasto con il lucchetto, a sinistra della tastiera) è attivo o disattivo; la maschera con 1101 1111 (=DFH) forza comunque a 0 il bit5 del dato letto, trasformando appunto le minuscole (es: "a" = 61H = 0110 0001) in maiuscole (es"A" = 41H = 0100 0001):
     

Addr

Codifica Masm

Istruzione

0100
0102
0104
0106
0108
010C
010E
B4 00         
CD 16
24 DF
3C 51
0F 84 010E  
EB F2
90
xxx00:





_OUT:
MOV   AH,00H
INT   16H
AND   AL,0DFH
CMP   AL,'Q'
JZ    _OUT
JMP   SHORT xxx00
NOP
     
bulletLa figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi e del tipo di indirizzamento istruzioni):
          

Addr

Codifica Masm

Sequenza Bytes

Istruzione

0100
0101
55
55AA
55
AA 55
Depo01 
Depo02
DB 55H
DW 55AAH
---- ---------------- ----------------- ------- ----------------------
0103
0105
0109
010D
0111
0115
0119
011E
0124

0126
012B
0130
0135
013A
23 D3
22 0E 0100 
23 0E 0101
20 1E 0100
21 1E 0101
81 E6 1234 
80 26 0100 02 
81 26 0101 1234 
24 02

2E 22 06 0100 
2E 23 06 0101
2E 20 06 0100 
2E 21 06 0101
25 1122
23 D3  
22 0E 00 01 
23 0E 01 01
20 1E 00 01 
21 1E 01 01
81 E6 34 12 
80 26 00 01 02 
81 26 01 01 34 12  
24 02

2E 22 06 00 01 
2E 23 06 01 01
2E 20 06 00 01 
2E 21 06 01 01
25 22 11
AND DX,BX
AND CL,[Depo01]
AND CX,[Depo02]
AND [Depo01],BL
AND [Depo02],BX
AND SI,1234H
AND [Depo01],02H
AND [Depo02],1234H
AND AL,02H

AND AL,CS:[Depo01]
AND AX,CS:[Depo02]
AND CS:[Depo01],AL
AND CS:[Depo02],AX
AND AX,1122H

    

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 007 - AND

    

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