Tutorial |
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 189 di 198] |
|
|
Questa 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. | |
Di 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. | |
Gli operandi possono avere dimensione di un byte, di una word o di una doubleword ( con 80386/486). |
Le sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni ): |
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 |
N° 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 |
La 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:
|
Il 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"] |
Vediamo 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". | ||||||||||||||||||
Il 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:
| ||||||||||||||||||
La figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi e del tipo di indirizzamento coinvolti (leggi le istruzioni): |
|
|
Scheda n° 07 | Istruzioni Cpu 80x86 | |||||||
Istruzione 189 - TEST |
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|