Estratto del documento

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

Anteprima
Vedrai una selezione di 8 pagine su 33
Preparazione orale esame Calcolatori elettronici cel   Pag. 1 Preparazione orale esame Calcolatori elettronici cel   Pag. 2
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Preparazione orale esame Calcolatori elettronici cel   Pag. 6
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Preparazione orale esame Calcolatori elettronici cel   Pag. 11
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Preparazione orale esame Calcolatori elettronici cel   Pag. 16
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Preparazione orale esame Calcolatori elettronici cel   Pag. 21
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Preparazione orale esame Calcolatori elettronici cel   Pag. 26
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Preparazione orale esame Calcolatori elettronici cel   Pag. 31
1 su 33
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/01 Elettronica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher aticante di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici cel e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi della Campania "Luigi Vanvitelli" o del prof Marturiello Ciro.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community