Introduzione al linguaggio assembly del microprocessore 8086 3 a parte

9
Introduzione al linguaggio assembly del microprocessore 8086 3 a parte

description

Assembler. Introduzione al linguaggio assembly del microprocessore 8086 3 a parte. I registri dell’8086. - PowerPoint PPT Presentation

Transcript of Introduzione al linguaggio assembly del microprocessore 8086 3 a parte

Page 1: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

Introduzione al linguaggio assembly del microprocessore 8086

3a parte

Page 2: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

I registri dell’8086Il microprocessore 8086 dispone di 14 registri per l’esecuzione delle operazioni aritmetiche e logiche e per l’indirizzamento delle aree dati, di programma e di catasta(stack).

Alcuni registri sono associati a particolari operazioni.

AH AL

BH BL

CH CL

DH DL

AccumulatoreBaseConteggioDati

AXBXCXDX

15 8 7 0

Questi quattro registri vengono chiamati registri generali, essi possono essere visti anche come otto registri ad 8 bit.

Questi quattro registri vengono chiamati registri generali, essi possono essere visti anche come otto registri ad 8 bit.

Page 3: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

I registri dell’8086Il microprocessore 8086 dispone di 14 registri per l’esecuzione delle operazioni aritmetiche e logiche e per l’indirizzamento delle aree dati, di programma e di catasta(stack).

Punt. a catastaPunt. baseIndice SorgenteIndice Destinazione

SPBPSIDI

15 0

Questi quattro registri vengono chiamati registri puntatori e vengono gestiti sempre a 16 bit.

Questi quattro registri vengono chiamati registri puntatori e vengono gestiti sempre a 16 bit.

Page 4: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

I registri dell’8086Il microprocessore 8086 dispone di 14 registri per l’esecuzione delle operazioni aritmetiche e logiche e per l’indirizzamento delle aree dati, di programma e di catasta(stack).

Seg. CodiceSeg. DatiSeg. CatastaSeg. Extra

CSDSSSES

15 0

Questi quattro registri vengono gestiti sempre a 16 bit e contengono gli indirizzi dei quattro segmenti in cui è strutturato un programma assembly.

Questi quattro registri vengono gestiti sempre a 16 bit e contengono gli indirizzi dei quattro segmenti in cui è strutturato un programma assembly.

Page 5: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

I registri dell’8086Il microprocessore 8086 dispone di 14 registri per l’esecuzione delle operazioni aritmetiche e logiche e per l’indirizzamento delle aree dati, di programma e di catasta(stack).

Contatore di programma

Reg. Flag

IP15 0

Questi due registri servono rispettivamente a:

• contenere l’indirizzo della prossima istruzione da eseguire (IP) a 16 bit;

• contenere valori binari che riflettono l’avverarsi o meno di alcuni eventi a seguito dell’esecuzione di un istruzione (FLAG), bit singoli.

Questi due registri servono rispettivamente a:

• contenere l’indirizzo della prossima istruzione da eseguire (IP) a 16 bit;

• contenere valori binari che riflettono l’avverarsi o meno di alcuni eventi a seguito dell’esecuzione di un istruzione (FLAG), bit singoli.

O D I T S Z A P C FLAG

Page 6: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

Utilizzo dei registriIl registro AX serve da accumulatore principale. Operazioni aritmetiche e logiche vengono di solito effettuate su questo registro. Tutte le operazioni di ingresso e uscita vengono effettuate via AX.

Il registro AX serve da accumulatore principale. Operazioni aritmetiche e logiche vengono di solito effettuate su questo registro. Tutte le operazioni di ingresso e uscita vengono effettuate via AX.

BX è il registro base. Questo è l’unico dei registri di uso generale che può anche essere utilizzato per puntare a locazioni di memoria.

BX è il registro base. Questo è l’unico dei registri di uso generale che può anche essere utilizzato per puntare a locazioni di memoria.

CX è il registro di conteggio. Il contenuto di CX viene automaticamente diminuito di 1 a ogni ciclo nell’esecuzione di istruzioni iterative, facilitando in questo modo molte operazioni su stringhe e di spostamento dati.

CX è il registro di conteggio. Il contenuto di CX viene automaticamente diminuito di 1 a ogni ciclo nell’esecuzione di istruzioni iterative, facilitando in questo modo molte operazioni su stringhe e di spostamento dati.

Il registro dati DX è anche utilizzato come puntatore in alcune istruzioni di ingresso/uscita.

Il registro dati DX è anche utilizzato come puntatore in alcune istruzioni di ingresso/uscita.

I registri AX, BX, CX, DX possono essere usati liberamente per operazioni aritmetiche e logiche, a eccezione di alcune operazioni quali la moltiplicazione MUL, la divisione DIV e altre ancora che richiedono che alcuni degli operandi si trovino in registri prestabiliti.

Page 7: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

Utilizzo dei registriUn secondo gruppo di registri è quello dei registri puntatori e indice.

SP (stack pointer) è il puntatore all’inizio della catasta; viene automaticamente modificato all’esecuzione delle istruzioni PUSH, quando nuovi dati vengono messi in catasta, e POP quando i dati vengono tolti dalla catasta.

SP (stack pointer) è il puntatore all’inizio della catasta; viene automaticamente modificato all’esecuzione delle istruzioni PUSH, quando nuovi dati vengono messi in catasta, e POP quando i dati vengono tolti dalla catasta.

BP è il puntatore base e serve per accedere direttamente a dati che si trovano sulla catasta.

BP è il puntatore base e serve per accedere direttamente a dati che si trovano sulla catasta.

I due indici sorgente SI e destinazione DI puntano alla memoria dati. Essi vengono usati per passare più dati in successione da una locazione iniziale a una finale, ad esempio nel trasferimento di stringhe di caratteri.

I due indici sorgente SI e destinazione DI puntano alla memoria dati. Essi vengono usati per passare più dati in successione da una locazione iniziale a una finale, ad esempio nel trasferimento di stringhe di caratteri.

Page 8: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

Utilizzo dei registri

I registri CS, DS, SS, ES puntano ai segmenti definiti in memoria.

Il registro CS (code segment) punta al segmento contenente le istruzioni del programma,

Il registro CS (code segment) punta al segmento contenente le istruzioni del programma,

Il registro DS (data segment) punta al segmento dell’area datiIl registro DS (data segment) punta al segmento dell’area dati

Il registro SS (stack segment) al punta al segmento di catasta. Non è necessario che i segmenti siano localizzati in zone diverse della memoria; le rispettive aree possono coincidere.

Il registro SS (stack segment) al punta al segmento di catasta. Non è necessario che i segmenti siano localizzati in zone diverse della memoria; le rispettive aree possono coincidere.

E’ infine a disposizione un altro registro di segmento, ES (extra segment). Esso è usato per indirizzare un’area dati diversa da quella alla quale fa riferimento DS.

E’ infine a disposizione un altro registro di segmento, ES (extra segment). Esso è usato per indirizzare un’area dati diversa da quella alla quale fa riferimento DS.

Page 9: Introduzione al linguaggio assembly del  microprocessore  8086  3 a  parte

Il registro delle flagLe 9 flag del sistema 8086 sono raccolte in un registro collettivo che ha come nome stato del processore. Ogni flag corrisponde ad un bit del registro di stato; i rimanenti 7 bit non sono utilizzati. Le flag non sono indirizzabili singolarmente, per l’accesso ad esse occorre far uso delle funzioni definite a questo scopo.

Le flag sono: Carry, Parità, Auxiliary carry, Zero, Sign, Trap, Interrupt, Direction e Overflow. In generale, le flag servono sia per determinare le condizioni di esecuzione del processo, sia per riportare il risultato di un’operazione e gli eventuali errori. Per questo i valori delle flag vengono modificati mediante l’uso di apposite istruzioni e anche automaticamente durante l’esecuzione di operazioni aritmetiche e logiche.

Le flag Carry, Auxiliary carry, Overflow e Sign riflettono il risultato dell’ultima operazione aritmetica che è stata eseguita, segnalando eventuali condizioni di errore.

Le flag Parità e Zero indicano in maniera compatta le condizioni di parità sui bit di una parola e se il risultato di una operazione è uguale a zero.

Le flag Direction, Interrupt e Trap sono sotto il controllo esclusivo dell’operatore. Direction indica se le operazioni di trasferimento di blocchi di dati vanno eseguite per indirizzi crescenti o decrescenti di memoria; Interrupt serve all’abilitazione o disabilitazione delle interruzioni e Trap mette il processore in un modo di esecuzione di una sola istruzione alla volta. Quest’ultima flag è di utilità in fase di controllo dei programmi.

Le 9 flag del sistema 8086 sono raccolte in un registro collettivo che ha come nome stato del processore. Ogni flag corrisponde ad un bit del registro di stato; i rimanenti 7 bit non sono utilizzati. Le flag non sono indirizzabili singolarmente, per l’accesso ad esse occorre far uso delle funzioni definite a questo scopo.

Le flag sono: Carry, Parità, Auxiliary carry, Zero, Sign, Trap, Interrupt, Direction e Overflow. In generale, le flag servono sia per determinare le condizioni di esecuzione del processo, sia per riportare il risultato di un’operazione e gli eventuali errori. Per questo i valori delle flag vengono modificati mediante l’uso di apposite istruzioni e anche automaticamente durante l’esecuzione di operazioni aritmetiche e logiche.

Le flag Carry, Auxiliary carry, Overflow e Sign riflettono il risultato dell’ultima operazione aritmetica che è stata eseguita, segnalando eventuali condizioni di errore.

Le flag Parità e Zero indicano in maniera compatta le condizioni di parità sui bit di una parola e se il risultato di una operazione è uguale a zero.

Le flag Direction, Interrupt e Trap sono sotto il controllo esclusivo dell’operatore. Direction indica se le operazioni di trasferimento di blocchi di dati vanno eseguite per indirizzi crescenti o decrescenti di memoria; Interrupt serve all’abilitazione o disabilitazione delle interruzioni e Trap mette il processore in un modo di esecuzione di una sola istruzione alla volta. Quest’ultima flag è di utilità in fase di controllo dei programmi.