Introduzione al linguaggio assembly del microprocessore 8086 3a parte Assembler Introduzione al linguaggio assembly del microprocessore 8086 3a parte
I registri dell’8086 Il 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. Accumulatore Base Conteggio Dati AH AL AX BX CX DX BH BL CH CL DH DL 15 8 7 0 Questi quattro registri vengono chiamati registri generali, essi possono essere visti anche come otto registri ad 8 bit.
I registri dell’8086 Il 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 catasta Punt. base Indice Sorgente Indice Destinazione SP BP SI DI 15 0 Questi quattro registri vengono chiamati registri puntatori e vengono gestiti sempre a 16 bit.
I registri dell’8086 Il 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. Codice Seg. Dati Seg. Catasta Seg. Extra CS DS SS ES 15 0 Questi quattro registri vengono gestiti sempre a 16 bit e contengono gli indirizzi dei quattro segmenti in cui è strutturato un programma assembly.
I registri dell’8086 Il 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 IP 15 0 FLAG O D I T S Z A P C 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.
Utilizzo dei registri 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. 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. 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.
Utilizzo dei registri Un 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. 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.
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 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. 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.
Il registro delle flag 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.