I programmi Assembler sono composti di:
• Istruzioni: generano un’istruzione macchina
o Codice operativo, serie di bit destinata all’esecuzione di una determinata istruzione
o Operandi, situati in una locazione di memoria. Possono essere variabili, costanti o identificatori.
• Pseudoistruzioni o direttive: sono comandi per l’assemblatore
o Definizione di variabili
o Definizione di costanti
o Gestione dei segmenti del codice
Modi di indirizzamento: i dati possono essere contenuti in registri, memoria, periferiche di I/0, nell’istruzione stessa:
• Register, nell’istruzione è specificato il registro da utilizzare come operando
• Immediate, nell’istruzione è specificato il dato da utilizzare con operando
• Direct, nell’istruzione è specificato l’identificatore a una variabile in memoria da utilizzare come operando
• Register Indirect, l’operando è contenuto in un registro indice (BX, DI, SI, BP)
• Base Relative, l’indirizzo dell’operando è calcolato mediante la somma di un registro indice con una costante precisata nell’istruzione
• Direct Indexed, l’indirizzo è ottenuto sommando il contenuto di DI o SI con il contenuto di una variabile che funge da offset
• Base Indexed, l’indirizzo è ottenuto sommando il contenuto di DI o SI con l’offset contenuto in BX o BP.
Esistono 92 istruzioni nell’8086 di diverso tipo:
• Trasferimento Dati
• Aritmetiche
• Manipolazione di Bit
• Control Transfer
• Manipolazione di Stringhe
• Interrupt Handling
• Process Control
MOV non ammette alcune combinazioni di operandi:
• MOV MEMORIA, MEMORIA (conviene passare tramite i registri)
• MOV SEGMENT REGISTER, SEGMENT REGISTER (conviene passare tramite stack)
• MOV SEGMENT REGISTER, IMMEDIATO (passare tramite registri)
• MOV AL, AX (usare la funzione cbw)
L’istruzione SHR equivale ad una divisione per 2^n. (per numeri senza segno, altrimenti SAR)
L’istruzione SHL equivale ad una moltiplicazione per 2^n. (per numeri senza segno, altrimenti SAL)
JMP supporta due tipi di salto incondizionato:
• Diretti
o Short, l’indirizzo è memorizzato come differenza (displaycement) tra la partenza e l’arrivo in un solo byte
o Near, l’indirizzo è memorizzato come differenza (displaycement) tra la partenza e l’arrivo in una word
o Far, l’indirizzo è su due word: è quindi memorizzato l’intero indirizzo.
• Indiretti, l’indirizzo non è indicato ma viene fornito il puntatore alla locazione nella quale trovare l’indirizzo destinazione
CALL si comporta diversamente a seconda della procedura chiamata:
• se la procedura chiamata è di tipo NEAR, carica nello stack solo il contenuto dell’Instruction Pointer (IP), cioè l’indirizzo di offset dell’istruzione successiva;
• se la procedura chiamata è di tipo FAR, carica nello stack prima il contenuto del registro di segmento CS e poi il contenuto del registro IP.
Le procedure comunicano tra di loro tramite il passaggio di parametri che può avvenire:
• by value, viene spedita alla procedura una copia del parametro
• by reference, viene inviato l’indirizzo sul quale agire
Si possono usare diverse strategie per passare i parametri:
• le variabili globali
• i registri
• lo stack
Le istruzioni per il controllo del processore servono a regolare il comportamento del processore a seconda di alcuni parametri modificabili via software. Si dividono nelle seguenti categorie:
• istruzioni per la gestione delle interruzioni servono a gestire gli Interrupt software. L’arrivo di un segnale di interrupt causa il salvataggio di IP e CS, del Flag Register e l’esecuzione di una specifica routine di gestione dell’interrupt
• istruzioni sui flag permettono di settare il valore di alcuni flag
• istruzioni di sincronizzazione permettono di utilizzare dispositivi esterni
• istruzione nulla (NOP)
| < Prec. | Succ. > |
|---|






