REGISTRI
tutti a 16 bit
GENERAL POURPOSE: ax (accumulator), bx (base) , cx (count), dx (data);
si (source index), di (destination index), bp (base pointer), sp (stack pointer)
i registri AX BX CX DX sono quelli utili a memorizzare dati (operandi) e possono essere
manipolati anche solo per metà: *lettera*L/H per intedere parte bassa o alta (high low)
alcuni di questi possono avere degli utilizzi impliciti (es cx contatore x cicli, ax per operazioni
di mul…)
i registri indirizzo e puntatore servono per l’ accesso in memoria (si e di nella ram, sp bp
nello stack). potrebbero anche contenere a loro volta operandi ma non è bossibile l’ accesso
a singolo byte.
REGISTRI SEGMENTO
cs (code segment), ds (data segment), es (extra segment), ss (stack segment)
il segmento è un'area di memoria dello spazio dedicato ad un programma che è
specializzato x contenere diversi dati in diverse modalità:
il DATA segment è quell’ area di memoria dedicato ai dati, il CODE alle istruzioni, lo STACK
è uno spazio di appoggio (ricorda LIFO), l’EXTRA e un segmento jolly utilizzabile a
piacimento
REGISTRI SPECIALI
– ip (instruction pointer), flags (registro di stato PSW) (overflow, segno, zero, carry..)
I flag SONO SETTATI DALL’ ALU AD OGNI OPERAZIONE, si possono suddividere in due
categorie:
● di STATO
○ carry (CF)(1 se c’è) ,
○ carry ausiliario(AF)(è particolare, è una scrittura che si dice “a pacchetti”,
serve per manipolare dal punto di vista finanziaro per gestire alcune
operazone, indica un carry quando si produce un riporto tra il bit 3 e il bit 4 di
un operando)
○ parità(PF) ○ zero(ZF)
○ segno(SF) ○ overflow(OF)
● di CONTROLLO
○ trap (TF)(serve per il debug della riproduzione step by step),
○ Interrupt eneble(IF) (Usato per disabilitare (quando uguale a 0) eventuali
interrupt),
○ direction(DF)(serve nelle operazioni tra stringhe qwuando si vuole modificare
l’ incremento(DF=1: decremento; DF=0: incremewnto) dei registri indice (per
scorere i caratteri?)
Memoria e indirizzi fisici
La memoria dell’8086 è organizzata in segmenti, quindi l’ accesso in memoria è organizzato
in base all’ offset dall’ inizio del segmento
ES voglio accedere ad un dato nel data segment, l’ indirizzo dipende da DS e l’ offset del
dato da DS
Nell’ 8086 i segmenti tra loro hanno max un offset di 64K bytes.
Nonostante i registri siano da 16 bit la memoria nell’ 8086 ragiona con indirizzi di 20 bit (così
da avere più indirizzi e quindi più mem a disposizione):
si fa il CALCOLO DELL’ INDIRIZZO FISICO
l’indirizzo del segmento (DS,CS ecc.) è MOLTIPLICATO PER 16 (4 shl quindi vengono
aggiunti 4 0 in binario o 1 solo in esadecimale) poi viene fatto + OFFSET ( oppure
EFFECTIVE ADDRESS)
i vantaggi di utilizzare i segmenti in questo modo sta nel fatto che essendo gli indirizzi relativi
alla posizione dei segmenti e non fa riferimento ad un punto fisico e fisso della memoria, è
più semplice manipolare un programma su più memorie diverse perchè basta cambiare la
posizione dei segmenti.
NOTA
● CS viene inizializzato dal Sistema Operativo e non deve essere utilizzato dal
programmatore.
● SS viene inizializzato dal Sistema Operativo e non deve essere modificato dal
programmatore.
● DS deve essere prima salvato perchè contiene un info importante (che per ora
nossappiamo) e poi inizializzato dal programmatore.
INIZIALIZZAZIONE DEL DATA SEG:
è necessario fare mov ax, data poi mov ds,ax
così abbiamo messo in ds l’ indirizzo di partenza del data segment
● ES: deve essere inizializzato dal programmatore all’interno del suo programma
stessa inizializzazione del ds
N.B LA MEMORIA DELL 8086 è SEGMENTATA PER ESIGENZE PROGETTUALI,
CIOÈ perchè LA MEMORIA HA 20 BIT di indirizzi fisici e registri a 16 bit
Parentesi evoluzioni dell’8086: 80386 e 80486
questi processori aumentano la dimensione dei registri da 16 a 32 mantenendo però un
obiettivo: la RETROCOMPATIBILITÀ
i registri general purpose infatti (EAX, EDX, ESI,EBP..) sono su 32 bit ma è comunque
possibile l’ accesso al solo AX, DX che sono a 16 bit e di questi l’ accesso AH e AL a 8 bit
cio vale per tutti i registri che nella versione E-... sono a 32, ma è possibile l’ accesso a 16
Modi di indirizzamento 8086
1. IMMEDIATO: valore costante da 8 o 16 bit che fa parte dell’ istruzione
2. DIRETTO: indirizzo del dato (offset rispetto al data segment) fa parte dell’ istruzione
(es add ax,[1000])
3. REGISTER: in istruzione è dato il registro che contiene il dato (ax…)
4. REGISTER DIRETTO: nell’ istruzione c’è il registro che contiene l’ indirizzo del dato
(con bx, si o di es add ax, [si])
5. REGISTER RELATIVE: l’ indirizzo del dato è somma del contenuto di un registro
base o indice + spiazzamento (es add ax, 1000[si])
6. BASED INDEXED: l’ indirizzo del dato è somma del contenuto di un registro base +
contenuto di un registro indice (es add ax,[bx][si])
7. RELATIVE BASED INDEXED: l’ indirizzo del dato è somma del contenuto di un
registro base + contenuto di un registro indice + uno spiazzamento (es add ax,
1000[bx][si])
in tutti i casi il segment preso in considerazi di default è il DATA
IN CASO DI SALTO:
2 tipi di salto principali: INTERSEGMENT (in un altro segmento) , INTRASEGMENT (nello
stesso segmento)
la differenza sostanziale è che nell’ intra serve solo specificarfe lo spiazzamento, in inter
anche l’ indirizzo CS cambia pk si va in un'altra zona della mem (segmento)
4 modalità
1. INTRASEGMENT DIRECT: l’offset è dato nell’ istruzione e il nuovo indirizzo è
IP+offset (a 8 o 16 bit). i salti condizionati sono solo di questo tipo
2. INTRASEGMENT INDIRECT: l’ indirizzo di salto è già pronto e viene comunicato con
uno dei modi di indirizzamento visti prima (in un registro register ecc.) TRANNE L’
IMMEDIATO. quel valore viene sostituito ad IP
3. INTERSEGMENT DIRECT: nell’ istruzione è presente il nuovo IP e il nuovo CS da
sostituire
4. INTERSEGMENT INDIRECT: il nuovo contenuto di IP e CS è passato con uno dei
modi di indirizz tranne immediato e register
indirizzamento 80386
le modalità di indirizzamento del 8086 sono condivise eccetto il fatto che nelll’80386 tutti i
registri sono utilizzabili come registri base e indirizzo (anche i general p)
viene aggiunta una sola nuova modalità di indirizzamento:
SCALED INDEXED per semplificare l’ accesso agli elementi di un array (si può usare il
nome)
ISTRUZIONI struttura e CLASSI ECC
Classi di istruzioni
Il set di istruzioni dell’Assembler Intel 80x86 può essere suddiviso nelle seguenti classi:
1. TRASFERIMENTO: es. mov, push, pop
2. ARITMETICHE: es. add, sub, cmp, mul, div
3. LOGICHE: es. and, or, xor, not 4
4. SHIFTt: es. shl, shr
5. CONTROLLO: es. jmp, call, ret, jg, jge, loop
6. I/O: es. in, out
7. MANIPOL STRINGHE: es. movs, stos, lods
8. CONTROLLO DELLO STATO: es. hlt, wait
Le istruzioni sono a lunghezza variabile da 1 a 6 byte, ogni byte con la propria codifica
alcune istruzioni utilizzano ulteriori byte per il codice operativo, con informazioni relative al
modo di indirizzamento (esempio il valore di uno o più spiazzamenti)
in generale:
Nel codice operativo ci sono dei bit speciali:
● il bit W: indica se l’istruzione opera su un byte (W= 0) oppure su una parola (W = 1)
● il bit D: indica se il registro indicato nel campo Reg è sorgente (D = 0) o (D = 1)
● il bit S: Nelle istruzioni add, subtract, compare con immediati indica se un immediato
a 8 bit con segno viene esteso a 16 bit
● I campi MOD (2 bit) e R/M (3 bit) combinati insieme danno il modo di indirizzamento
Istruzioni aritmetiche, logiche e trasferimento dati
sono le istruzioni a 1 max 2 operandi
nelle combinanzioni tra register to memory ecc. sono illegali combinazioni come
memoria-memoria e immediato come destrinazione ecc.
Parallelismo 8086 MIPS
8086 ha meno registri general pourpouse rispertto al mips e molte delle differenze sono
legate a questo. es l’ 8086 ha come regstri operandi 1 sìdei due che è sia sorgente che
destinazione, mentre il mips non per forza, però non permette operazione register to
memory, tutti gli operandi devono esere caricati. inoltre il mips è RISC ed ha istruzione a
lunghezze fisse, mentre l’ 8086 è CISC con istruzioni a lunghezza variabile ontinus…..
istruzioni di trasferimento
non alterano i flag!!!!!! perchè non fanno ne controllo ne operazioni aritmetiche
mov : lavora su due operandi espliciti e copia da sorgente in destinazione: mov al,opr1
tutte le combinazini sono possibili tranne memoria-memoria e immediato destinazione
xchg
: xchg o1,o2
sta per “exchange”, cioè questa istruzione scambia il contenuto di operando1 con il contenuto di
operando2. almeno uno degli operandi deve essere un REGISTRO (general purpose) e non può
essere immediato
LEA: lea reg,indiriz
“load effective address” . carica in REGISTRO un indirizzo puntato dal secondo operando che è
passato in un qualsiasi modo di indirizzamento alla memoria (tranne immediate e register)
LDS LES lds reg,memoria
lds sta per “load data segment”, permette di caricare simultaneamente in DS un indirizzo di
segmento e in registro un indirizzo effettivo (offset)
per registro si intende un registro general purpose ,con memoria si intende una locazione di
memoria costituita da una doppia parola (ovvero una variabile dichiarata con DD) che contiene un
indirizzo completo (segmento:offset)
les è simile eccetto che l indirizzamento viene caricato in ES
PUSH (operando) E POP (operando)
operando è sempre di tipo Word; può essere un registro general purpose, di segmento (eccetto
l’istruzione pop CS che è illegale), una locazione di memoria (quindi una variabile) e un immediato
(nel solo caso di push)
Push e pop cambiano automaticamente il valore dello stack pointer SP; stack cresce verso
indirizzi più bassi
SS:SP contiene sempre l’indirizzo del valore presente sulla cima dello stack, ovvero quello inserito
per ultimo
push: sp=sp-2 POP:sp—>operando
sp←–operando sp=sp+2
ISTRUZIONI ARITMETICHE
modificano i flag i stato z, n , overflow,....,
Nell’alu non viene implementato l’ IEEE 754
l alu opera sui numeri relativi in complementi alla base importante
add e sub possono gestire operandi di un byte o un parola.
add desti
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti preparazione esame orale
-
Preparazione all'esame di Calcolatori elettronici
-
Preparazione esame orale, Metodi Quantitativi
-
Preparazione per orale Meccanica razionale