|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [
16
di 16] |
 |
|
Legenda della Tabella - HELP1 |
| |
| Le Tabelle
che descrivono le caratteristiche di ogni
istruzione hanno, di solito, una intestazione
(che ne illustra la sintassi)
e 5 campi (con i dettagli
funzionali); le informazioni fanno riferimento al
funzionamento in modo reale. I punti seguenti aiutano ad interpretare
questi dati. |
| |
|
ADC Destinazione, Sorgente |
Destinazione
<< Destinazione + Sorgente
+ flag Carry |
|
Esempio
di Applicazione
|
Mnemonico |
Operandi |
ADC
|
DX,BX
|
ADC
|
CL,[Depo01]
|
ADC
|
SI,1234H
|
ADC
|
[Depo01],02H
|
 | Numero dei Cicli di clock
(secondo campo): è il campo più precario di tutti
e va preso solo per farsi un'idea sui tempi d'esecuzione di
ciascuna delle istruzioni proposte dall'esempio, in funzione
del processore chiamato ad eseguirle: |
| Cicli
di Clock |
| 86 |
286 |
386 |
486 |
| 3 |
2 |
2 |
1 |
| 9+EA |
7 |
6 |
2 |
| 13+EA |
 |
NB:
il tempo effettivamente consumato per eseguire un'istruzione
è piuttosto articolato: un certo numero di cicli di clock è intrinseco
(e indicato dalla tabella) ma spesso va integrato
con altri cicli, in funzione del contesto in cui viene eseguita
l'istruzione.
Il numero di cicli di clock suggerito dal secondo campo
della tabella è dunque solo indicativo e sostanzialmente
inutile (... vorrei, ma non posso...). |
Gli effettivi valori sono influenzati
fortemente dall'architettura del processore e, nel loro ambito, da numerosi
altri fattori.
 | Le
temporizzazioni per tutti i processori :
alcune regole sono da ritenersi generali:
 | in ogni caso il tempo
corrispondente ad un ciclo di clock è pari
all'inverso della frequenza del
processore (con f=500Mhz >> T=2ns; con f=1Ghz >>
T=1ns) |
 | il numero di cicli nel funzionamento
in modo protetto è, di
solito, molto differente da quello in modo
reale: le nostre tabelle non si curano di mostrare le
differenze (per la conoscenza delle quali non rimane che consultare
i manuali), dando per scontato il funzionamento nel secondo modo. |
 | alcune istruzioni iterative (come
LOOP)
consumano un numero di clock proporzionale al numero di iterazioni
che compiono; la presenza di una n
nelle tabelle sottolinea questa evenienza (per esempio: 10+4n
significa comunque 10 cicli + 4 cicli per ogni giro
eseguito). |
 | le istruzioni di salto condizionato
(come JZ)
hanno sempre 2 tempi d'esecuzione; se la condizione non è vera il
salto non viene eseguito e il tempo consumato è solitamente molto
inferiore e specificato in tabella con il prefisso noJ. |
|
 | Le temporizzazioni
con l'8086 : data la quasi certa improbabilità
d'uso di questo oggetto ancestrale sono riportate
solo per completezza, essendo per altro presenti anche nella manualistica
ufficiale...; i tempi di esecuzione, molto elevati, evidenziano i limiti di
questa vecchia architettura e sono del tutto irrilevanti nel ...
nuovo millennio.... Come non bastasse devono essere spesso integrati dal
numero aggiuntivo di cicli dovuto:
 | al tipo di indirizzamento
richiesto (e
suggerito dalla Tabella EA, Effective
Adddress): è necessario consumare un determinato numero di
cicli di clock aggiuntivi per assicurare il
funzionamento con operandi in memoria; ecco il dettaglio:
|
|
| Tabella
Effective Address Calculation |
| Tipo
di Indirizzamento Effettivo |
N°
Clock |
Esempio |
| Spiazzamento |
6 |
MOV AX,Depo |
| Tramite
Registro (BP
o BX
o DI
o SI) |
5 |
MOV AX,[BP] |
| Spiazzamento+
Base (BP
o BX) |
9 |
MOV AX,Depo[BP] |
| Spiazzamento+
Indice (DI
o SI) |
9 |
MOV AX,Depo[DI] |
| Base
BP + Indice (DI o SI) |
7 |
MOV AX,[BP+DI] |
| Base
BX + Indice (DI o SI) |
8 |
MOV AX,[BX+DI] |
| Spiazzamento
+ Base BP
+ Indice DI |
11 |
MOV AX,Depo[BP+DI] |
| Spiazzamento
+ Base BX
+ Indice SI |
11 |
MOV AX,Depo[BX+SI] |
| Spiazzamento
+ Base BP
+ Indice SI |
12 |
MOV AX,Depo[BP+SI] |
| Spiazzamento
+ Base BX
+ Indice DI |
12 |
MOV AX,Depo[BX+DI] |
 | la presenza di
override,
cioè la volontà di dichiarare esplicitamente il segmento di una
determinata locazione di memoria (per esempio
CS:[Depo])
aggiunge altri 2 cicli di clock al
totale.
|
 | a questo processore si riferisce anche
il terzo campo (Accessi in memoria): indica il numero di accessi in memoria previsti dall'istruzione e serve
per integrare il numero effettivo di cicli di clock necessari per eseguirla,
4 in più per ogni accesso. |
 | Le temporizzazioni
con gli altri 80x86 : possono essere molto
diverse da quelle indicate, per esempio a causa di questi
eventi:
 | sebbene il calcolo
dell'indirizzo effettivo sia ora realizzato da hardware e non
comporti l'aggiunta di cicli pretesa dall'8086 può ancora
capitare di aggiungere un ciclo
al totale se l'operando in memoria richiede 3 riferimenti, come in
MOV AX,Depo01[BX+SI]
o in MOV AX,[BX+SI+10]. |
 | per alcune istruzioni di
controllo (come CALL)
il numero di clock è influenzato dalla lunghezza dell'istruzione
successivamente; la presenza di una m
nelle tabelle sottolinea questa necessità (per esempio: 10+4m
significa comunque 10 cicli + 4 cicli per ogni componente
dell'istruzione successiva, per esempio il suo numero di bytes....). |
|
 |
Accessi in memoria (terzo
campo): vedi secondo campo, numero di cicli di clock. |
 | Numero di Bytes
dell'istruzione (quarto campo):
indica il numero di bytes previsti per codificare l'istruzione, di solito
almeno un codice operativo e talvolta uno o più operandi: |
 | Flag Influenzate
dall'istruzione (quinto campo): di certo la parte più utile
della tabella, mette in evidenza tutti i nove bit
significativi del registro delle flag,
segnalando il valore assunto da ciascuno di essi dopo l'esecuzione
dell'istruzione; i nove bit rappresentano le flag di Overflow, di Direzione,
di Interrupt, diTrap, di Segno, di Zero, di Riporto Ausiliario, di Parità e
di Riporto (Carry), distribuiti nel registro in accordo con lo schema
seguente:
| bit15 |
bit14 |
bit13 |
bit12 |
bit11 |
bit10 |
bit9 |
bit8 |
bit7 |
bit6 |
bit5 |
bit4 |
bit3 |
bit2 |
bit1 |
bit0 |
| |
|
|
|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
Sono previste 5 possibilità:
 | ? la
flag può cambiare, assumendo un valore
indefinibile a priori. |
 | # la
flag subisce certamente un cambiamento,
in funzione del risultato dell'istruzione. |
 | 0 la
flag è comunque lasciata a zero. |
 | 1 la
flag è comunque lasciata a uno. |
 | (casella vuota) nessuna
variazione. |
|
| Flag
influenzate |
| O |
D |
I |
T |
S |
Z |
A |
P |
C |
| ? |
|
|
|
1 |
# |
# |
# |
? |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|