Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 189 di 198] 

    

    TEST - Confronta coppie di bit modificando le flags
     
bulletQuesta istruzione simula la AND logica dell'operando sorgente con l'operando destinazione, lasciandogli entrambi inalterati, al contrario di quanto farebbe invece l'effettiva AND; questo basta per modificare le flag coinvolte dal risultato e a favorire gli eventuali salti condizionati (Jxx) conseguenti.
bulletDi solito viene utilizzata per confrontare i singoli bit (anche più di uno) di un operando, ponendo nel primo il dato da testare e nell'altro la maschera, cioè la struttura che indica il bit da verificare; con operandi a 8 bit la maschera potrebbe essere il numero binario 00010000, in grado di testare il bit4 dell'altro operando.
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):
         
TEST Destinazione ,Sorgente
TEST
1°_dato,    2°_dato
 Cambia le Flag   simulando  [ 1°_dato  AND  2°_ dato]
 

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

TEST

DX,BX

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

TEST

CL,[Depo01]

 9+EA 6 5 2 1 2,4

TEST

CX,[Depo02]

13+EA

TEST

[Depo01],BL

9+EA 6 5 2 1 2,4

TEST

[Depo02],BX

13+EA
                    

TEST

SI,1234H

5 3 2 1 no 3,4

TEST

[Depo01],02H

11+EA 6 5 2 1 3,6

TEST

[Depo02],1234H

11+EA
                    
TEST

AL,02

4 3 3 1 no 2,3
         
bulletLa tabella evidenzia l'azione dell'istruzione sulle flag, mostrando tra l'altro che sia quella di Overflow che quella di carry sono lasciate a zero; le sue tipologie degli operandi sono 3:
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 (per altro simulata, vedi figura) sottolinea l'uso raffinato di questa istruzione per verificare il valore logico di uno o più 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
 10H   0001 0000  =
     ---------------- ------------------
 10H = 0001 0000 dato che il bit4 è a"1"
[00H = 0000 0000 se il bit4 fosse a"0"]
     
bulletVediamo un concreto esempio d'applicazione di questa tecnica utilizzata per testare il valore logico di un determinato bit di un registro. Supponendo di disporre di un dato a 8 bit in AL, dopo aver predisposto una costante, uguale a 0000 0100 (=04H), con la maschera da imporre sul dato, l'istruzione ignora tutti i bit di AL che corrispondono allo "0" della maschera ed esegue il TEST (=simulazione di AND) solo su quelli a "1".
bulletIl registro AL non subisce modifiche ma le flag danno conto del risultato, cosicché se il bit di AL sotto test, il bit2, vale a sua volta "0" il programma salterà a bit2_0, mentre al contrario eseguirà regolarmente l'istruzione successiva (a bit_1); il codice che offre questo servizio è mostrato qui di seguito:
     

Addr

Codifica Masm

Istruzione

0100
0102
0106

01xx
A8 04 
0F 84 01xx


bit2_1:

bit2_0:
TEST  AL,04H
JZ    bit2_0
;bit2 di AL = 1
;...omissis....
;bit2 di AL = 0
     
bulletLa figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi e del tipo di indirizzamento coinvolti (leggi le 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
85 D3
84 0E 0100 
85 0E 0101
84 1E 0100
85 1E 0101
F7 C6 1234 
F6 06 0100 02 
F7 06 0101 1234 
A8 02

2E 84 06 0100 
2E 85 06 0101
2E 84 06 0100 
2E 85 06 0101
A9 1122
85 D3  
84 0E 00 01 
85 0E 01 01
84 1E 00 01 
85 1E 01 01
F7 C6 34 12 
F6 06 00 01 02 
F7 06 01 01 34 12  
A8 02

2E 84 06 00 01 
2E 85 06 01 01
2E 84 06 00 01 
2E 85 06 01 01
A9 22 11
TEST DX,BX
TEST CL,[Depo01]
TEST CX,[Depo02]
TEST [Depo01],BL
TEST [Depo02],BX
TEST SI,1234H
TEST [Depo01],02H
TEST [Depo02],1234H
TEST AL,02H

TEST AL,CS:[Depo01]
TEST AX,CS:[Depo02]
TEST CS:[Depo01],AL
TEST CS:[Depo02],AX
TEST 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 189 - TEST

    

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