Tutorial
|
Dettaglio Istruzioni |
Istruzioni della Cpu 80x86 |
SCHEDA n° 07 [I/ 027 di 198] |
|
![]() |
|
![]() | Questa istruzione analizza i bytes contenuti in 2 locazioni di memoria e modifica le flag in funzione del risultato. |
![]() | In pratica simula la sottrazione degli 8 bit della locazione sorgente da quelli della locazione destinazione senza però alterare il byte della destinazione (come farebbe invece l'effettiva sottrazione, SUB); questo basta per modificare le flag coinvolte dal risultato e a favorire gli eventuali salti condizionati (Jxx) conseguenti. |
![]() | Si tratta di una istruzione piuttosto efficiente, nata per confrontare il contenuto di 2 aree di memoria, per esempio 2 stringhe di caratteri; per default utilizza le coppie di registri DS:SI per puntare in minuendo (destinazione) e ES:DI per puntare il sottraendo (sorgente). |
![]() | In questo è evidente una incongruenza con le convenzioni Intel, per cui il registro indice Sorgente per eccellenza è SI (Source Index) e quello Destinazione è DI (Destination Index): prendiamo atto senza farci intimorire.... |
![]() | L'istruzione è particolarmente utile per confrontare 2 tabelle; per trovare un determinato byte in una tabella è disponibile la SCASB che si basa sul medesimo principio di funzionamento. |
![]() | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
![]() |
CMPSB | Cambia le Flag simulando { DS:[SI] - ES:[DI] } | |||||||||||||||
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 | ||
CMPSB |
|
22 | 8 | 10 | 8 | 2 | 1 | # | # | # | # | # | # |
![]() | La tabella evidenzia l'assenza di operandi: in
realtà, essendo un'applicazione particolare della CMPS,
pur non dichiarandoli esplicitamente l'istruzione coinvolge i dati a 8
bit presenti nelle locazioni messe a confronto; in dettaglio:
| ||||||||||||||
![]() | Questa potente istruzione esegue con un solo codice operativo il compito di ben 4 istruzioni (anche se a rigor di logica dovremmo mettere in conto anche il salvataggio e il recupero delle flag, dato che INC influisce su di loro), cioè equivale all'esecuzione del seguente codice: |
MOV
AL,DS:[SI] CMP AL,ES:[DI] PUSHF INC SI INC DI POPF |
![]() | La figura seguente mostra le caratteristiche di questa istruzione: |
|
![]() | Prima di concludere è opportuno sottolineare che questa istruzione può fruire dell'operatore di autoripetizione REPE o REPNE: anteponendolo al suo mnemonico il processo di confronto viene ripetuto automaticamente CX volte su tutta l'area sotto test, a meno che non venga trovata una coppia di valori uguali (E) o diversi (NE); per il corretto uso dei questo prefisso è dunque necessario caricare preventivamente CX con il numero di confronti da eseguire. |
![]() | Data l'utilità di questa tecnica viene proposto un esercizio d'esempio: |
|
![]() | L'analisi del codice suggerisce queste considerazioni:
|
|
![]() |
Scheda n° 07 |
![]() |
Istruzioni Cpu 80x86 |
![]() |
![]() |
![]() |
||
Istruzione 027 - CMPSB |
|
|
|
Home
![]() |
|
|||||||
|
Motore Ricerca |
|