Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly...

78
R. Napolitano - M. Esposito Settembre 2007 1 Elementi di Assembly 8086 I.T.I. “A. RIGHI e VIII” – Napoli Specializzazione Informatica Tradizionale Corso D – Materia: Sistemi

Transcript of Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly...

Page 1: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

1

Elementi di Assembly 8086

I.T.I. “A. RIGHI e VIII” – NapoliSpecializzazione Informatica Tradizionale

Corso D – Materia: Sistemi

Page 2: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

2

Assembly 8086 – I registri

Per poter elaborare le informazioni ricevute dall’esterno, un Processore ha bisogno di memorizzare gli “operandi” temporaneamente in locazioni di memoria in attesa di poter operare su di essi per eseguire le operazioni richieste.

Page 3: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

3

Assembly 8086 – I registri

DEFINIZIONEI Registri sono locazioni di memoria ultraveloci (hanno la velocità del clock) in stretto contatto con tutte le altre parti della CPU a cui appartengono, con le quali interagiscono al fine di elaborare i dati pervenuti, e organizzare il loro smistamento

Page 4: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

4

Assembly 8086 – I registri

I registri sono di norma specializzati, cioè sono in grado di compiere al meglio determinate operazioni anziché altre; usare un registro diverso da quello specializzato non vanifica l’operazione desiderata, ma la rende meno efficiente e più costosa (in termini di tempo di esecuzione e di spazio necessario nella memoria di programma).

Page 5: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

5

Assembly 8086 – I registri

Il numero e la dimensione dei registri si sono evoluti con la storia dei processori, come anche la disponibilità di nuove istruzioni (dal 386 al Pentium IV i registri sono a 32 bit). In ogni caso i vecchi registri a 16 bit sono ancora riconosciuti e utilizzati nella programmazione.

Page 6: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

6

Assembly 8086 – I registri

Nell’8086 il programmatore ha accesso a 14 registri a 16 bit- 4 registri generali- 4 registri segmento- 4 registri puntatori o indice- 2 registri di controllo

• contatore di programma• registro di flag

Page 7: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

7

Assembly 8086 – I registri

I Registri dell’8086

Page 8: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

8

Assembly 8086 – I registri

I registri generali

I registri di uso generale (AX,BX,CX,DX) possono essere utilizzati così come sono definiti (cioè a 16 bit) o in due metà a 8 bit (AH – AL , BH – BL ecc.. dove H = High, ovvero parte alta e L = Low, parte bassa. Il loro impiego nell’una o nell’altra dimensione dipende dal contesto, cioè dall’istruzione che li coinvolge.

Page 9: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

9

Assembly 8086 – I registri

REGISTRI

GENERALI

Page 10: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

10

Assembly 8086 – I registri

Dividono la memoria in segmenti da 64kb. Vengono usati con altri registri a 16 bit per accedere a tutta la memoria disponibile.

Page 11: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

11

Assembly 8086 – I registri

Page 12: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

12

Assembly 8086 – I registri

Infine troviamo il contatore di programma e il registro dei flag (flag = segnalazione)

Contatore di programma IP (Instruction Pointer). Il processore “punta”, cioè contiene l’indirizzo del codice operativo dell’istruzione che sta per essere eseguita.

Page 13: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

13

Assembly 8086 – I registri

REGISTRO DEI FLAG

Questo registro ha un impiego completamente diverso da tutti gli altri.Il suo contenuto non si utilizza nella consueta forma di word, ma in funzione dei singoli bit in esso contenuti; dei 16 bit disponibili, solo 9 sono significativi, mentre i rimanenti 7 sono inutilizzati.

- 6 bit sono i flag di stato, e sono influenzati dal risultatodelle istruzioni aritmetico logiche

- 3 bit sono flag di controllo, controllabili da programma con opportune istruzioni dedicate

Page 14: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

14

Assembly 8086 – I registri

Il compito di questo registro è molto importante perché consente al processore di prendere decisioni. Il valore binario di un singolo flag è dunque sufficiente ad obbligare il processore ad eseguire un codice invece di un altro. Non esistono istruzioni che modificano in blocco questo registro; è in ogni caso possibile salvarne il valore nello stack o recuperarlo dallo stack.

Page 15: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

15

Assembly 8086 – I registri

FLAG DI STATO

CF (Carry Flag) = 1 se una somma/sottrazione haprodotto riporto/prestito

PF (Parità Flag) = 1 se il risultato di un’operazionecontiene un numero pari di 1

AF (Auxiliary Flag, flag di riporto ausiliario), usatonell’aritmetica BCD

ZF (Zero Flag) = 1 se un’operazione ha datorisultato nullo

SF (Sign Flag) = al bit più significativo (e cioè alsegno) dell’ultima operazione 0: positivo, 1:negativo)

OF (Overflow Flag) = 1 se l’operazione haprodotto overflow

Page 16: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

16

Assembly 8086 – I registri

FLAG DI CONTROLLO

TF (Trap Flag) se = 1 permette l’esecuzione passo-passo di un programma

IF (Interrupt Flag) se = 0 permette di disabilitare leinterruzioni provenienti dalle periferiche

DF (Direction Flag) utilizzata nella gestione dellestringhe per stabilire se DI o SI devono essereincrementati (DF=0) o decrementati (DF=1).

Page 17: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

17

Un calcolatore è capace di elaborare informazioni in base ad unaserie di istruzioni. fornitegli dall’utente.Tali istruzioni scritte in codice binario sono direttamenteinterpretabili dall’Unità Centrale e rappresentano il cosiddettoprogramma eseguibile o programma espresso in linguaggio macchina.Risulta chiaro che tale modo di rappresentazione delle istruzioni comporta notevoli difficoltà per le persone che devono scrivere e interpretare i programmi.

IL LINGUAGGIO MACCHINA E L’ASSEMBLY

Page 18: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

18

IL LINGUAGGIO MACCHINA E L’ASSEMBLY

Per semplificare il lavoro dei programmatori è stato messo a punto di un codice più comprensibile all’uomo (codice mnemonico) che viene tradotto da un programma (assembler), nella serie corrispondente di zero e uno (codice binario) interpretabili dalla macchina.

Il linguaggio nato dalla simbolizzazione mnemonica del codice macchina prende il nome di assembly.

Tra il linguaggio macchina e l’assembly esiste una corrispondenza uno a uno, cosa che li rende funzionalmente equivalenti.

Page 19: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

19

IL LINGUAGGIO MACCHINA E L’ASSEMBLY

Esiste quindi un legame molto stretto tra il linguaggio Assembly e il processore in quanto il codice operativo viene sostituito con una parola chiave (ovvero l’abbreviazione del termine inglese che definisce l’operazione da compiere), e agli indirizzi binari degli operandi vengono associati dei nomi simbolici più facilmente interpretabili dal programmatore. Pertanto è necessario realizzare un assembly diverso per ciascun tipo di processore (diversamente dai linguaggi ad alto livello, come il Pascal, dove vengono definite istruzioni standard indipendenti dalla struttura fisica dell’elaboratore).

Page 20: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

20

IL LINGUAGGIO MACCHINA E L’ASSEMBLY

Ciò nonostante, le istruzioni di qualsiasi linguaggio Assembly possono essere raggruppate in categorie ben definite, poiché ogni calcolatore deve essere in grado di compiere determinate azioni indipendentemente dal tipo di Assembly contenuto.

Page 21: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

21

IL LINGUAGGIO MACCHINA E L’ASSEMBLY

Qualsiasi linguaggio Assembly contiene:

- istruzioni per il trasferimento dati- istruzioni per l’esecuzione di operazioni aritmetiche sui numeri interi- istruzioni per l’esecuzione di operazioni logiche sull’intero dato o suisingoli bit

- istruzioni per modificare la sequenza di esecuzione di unprogramma

Page 22: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

22

IL LINGUAGGIO MACCHINA E L’ASSEMBLY

Altre istruzioni invece permettono di migliorare la potenza del processore e lo rendono più adeguato per la risoluzione di determinate problematiche:

- istruzioni per l’esecuzione di operazioni in virgola mobile- istruzioni per la gestione di stringhe di caratteri- istruzioni per la gestione dell’Input/Output

Page 23: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

23

Assembly 8086 – Le istruzioni di base trasferimento dati

ISTRUZIONI DI BASE PER IL TRASFERIMENTO DI DATI:

MOV

l ’istruzione di base per operare il trasferimento di dati a 8 o a 16 bit è MOV, il cuiformato è:

MOV destinazione, sorgente

ed equivale alla forma Pascal:

destinazione:=sorgente

destinazione può essere solo un registro o una variabile (locazione di memoria);sorgente può essere una costante, un registro o una variabile (locazione di memoria).

Page 24: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

24

Assembly 8086 – Le istruzioni di base trasferimento dati

Inoltre sorgente e destinazione devono sottostare alle seguenti regole:

- non possono riferirsi entrambe a due variabili;

- devono essere fra loro compatibili in termini di dimensioni.

Page 25: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

25

Assembly 8086 – Le istruzioni di base trasferimento dati

ISTRUZIONE MOV – Schema riassuntivo

Page 26: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

26

Assembly 8086 – Le istruzioni Aritmetiche

All’interno del calcolatore i valori interi positivi vengono rappresentati nella loro naturale configurazione binaria, mentre quelli negativi assumono la notazione in complemento a due.Di conseguenza, anche le istruzioni che consentono di effettuare le quattro operazioni elementari tra valori interi (a 8 o a 16 bit) faranno riferimento a questo tipo di codifica e sarà compito del programmatore interpretare, di volta in volta, il risultato in maniera corretta.

Page 27: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

27

Assembly 8086 –Operazioni Aritmetiche

AddizioneADD

Il formato generale di un’istruzione aritmetica di addizione è:

ADD destinazione, sorgente

ed equivale alla forma Pascal:destinazione:= destinazione+sorgente

dove per destinazione e sorgente vale quanto già detto per l’istruzione MOV.

Page 28: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

28

Assembly 8086 –Operazioni Aritmetiche

In base al risultato ottenuto vengono modificati i bit di stato del registro dei flag. In particolare:

SF assume il valore del bit più significativo del risultato, che ne rappresenta il segno;

ZF assume il valore 0 se il risultato dell’operazione è diverso da zero, 1 se il risultato dell’operazione è 0;

CF assume il valore 1 se nell’operazione si è verificato un riporto sul bit più significativo, 0 negli altri casi.

Page 29: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

29

Assembly 8086 –Operazioni Aritmetiche

Esempio di addizione e contenuto del registro dei flagdopo l’esecuzione del programma.

Page 30: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

30

Assembly 8086 – Operazioni Aritmetiche

Sottrazione

SUB

Il formato generale di un’istruzione aritmetica di sottrazione è:

SUB destinazione, sorgente

ed equivale alla forma Pascal:

destinazione:= destinazione - sorgente

dove per destinazione e sorgente vale quanto già detto per l’istruzione MOV.In base al risultato ottenuto vengono modificati i bit di stato del registro dei flag esattamente come avveniva nel caso dell’addizione.

Page 31: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

31

Assembly 8086 – Operazioni Aritmetiche

Esempio di operazione Sub e contenuto del registro dei flag dopo l’esecuzione del programma.

Page 32: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

32

Assembly 8086 – Operazioni Aritmetiche

Moltiplicazione

Il linguaggio assembly prevede istruzioni diverse per la moltiplicazione a seconda che i fattori vengano interpretati come numeri naturali (senza segno) o come numeri relativi (con segno).

MUL

L’istruzione di moltiplicazione tra numeri naturali, che prevede sempreimplicitamente l’uso dell’accumulatore, ha il seguente formato:

MUL sorgente

dove sorgente può essere un registro o una variabile (locazione di memoria).

Page 33: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

33

Assembly 8086 – Operazioni Aritmetiche

Se sorgente è di tipo byte, il valore di sorgente viene moltiplicato per quello contenuto in AL e il risultato, calcolato su 16 bit, posto in AX.

AX:= sorgente* AL

Bit di flag: CF=0 e OF=0 se AH=00CF=1 e OF=1 in tutti gli altri casi (AH≠00)Gli altri bit sono indefiniti

Page 34: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

34

Assembly 8086 – Operazioni Aritmetiche

Esempio di operazione MUL Con Sorgente di tipo Byte

Page 35: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

35

Assembly 8086 – Operazioni Aritmetiche

Se sorgente è di tipo word, il valore di sorgente viene moltiplicato per quello contenuto in AX e il risultato, calcolato su 32 bit, posto in

DX:AX.

DX:AX := sorgente* AX

Bit di flag :CF=0 e OF= se DX=0000CF=1 e OF=1 in tutti gli altri casi (DX≠0000)Gli altri bit sono indefiniti

Page 36: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

36

Assembly 8086 – Operazioni Aritmetiche

Esempio di operazione MUL con Sorgente di tipo WORD

Page 37: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

37

Assembly 8086 – Operazioni Aritmetiche

IMUL

L’istruzione di moltiplicazione tra numeri relativi è IMUL.

Opera in modo del tutto analogo a MUL, con l’unica differenza che il bit più significativo degli operandi viene considerato come bit di segno.

Bit di flag :

CF=0 e OF=0 solo se la parte più significativa del risultato rappresenta solo un’estensione a 16 bit del bit di segno (tutti i bit pari a 0 o a 1 e uguali al bit più significativo della parte bassa.In altre parole quando CF e OF valgono 1, indicano che AH o DX contengono cifre significative del risultato.

Page 38: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

38

Assembly 8086 – Operazioni Aritmetiche

In questo caso CF e OF sono uguali a 1poiché in AH ci sono cifre significative del risultato

Page 39: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

39

Assembly 8086 – Operazioni Aritmetiche

DIV

La divisione tra numeri naturali prevede la dichiarazione implicita del primo operando (il dividendo), ed ha il seguente formato:

DIV divisore

dove divisore può essere un registro o una variabile (locazione di memoria).

se divisore è di tipo byte, viene effettuata la divisione tra il valore contenuto in AX e il valore di divisore; il quoziente viene posto in AL e il resto in AH.

Page 40: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

40

Assembly 8086 – Operazioni Aritmetiche

AL:= AX / divisore AH:= resto della divisione

I bit di flag vengono modificati dall’operazione, ma il loro valore finale è privo di ogni significato.

se divisore è di tipo word, viene effettuata la divisione tra il valore contenuto nella coppia DX:AX e il valore di divisore.

AX:= DX:AX / divisoreDX:= resto della divisione

I bit di flag vengono modificati dall’operazione, ma il loro valore finale è privo di ogni significato.

Page 41: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

41

Assembly 8086 – Operazioni Aritmetiche

IDIV

L’istruzione di divisione tra numeri relativi:

IDIV divisore

Opera in modo del tutto analogo alla precedente.N.B. Se il quoziente va oltre la capacità del proprio registro di destinazione (FFh per divisore di un byte, FFFFh per divisore di tipo word), e quando si tenta la divisione per zero, si genera un’interruzione di tipo 0. In questo caso il quoziente e il resto sono indefiniti.

Page 42: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

42

Assembly 8086 – Operazioni Aritmetiche

ADC

E’ un’altra istruzione di addizione che consente di tener conto, nel calcolo, del riporto proveniente dall’istruzione precedente. Il formato è:

ADC destinazione, sorgente

ed equivale alla forma Pascal:

destinazione:= destinazione + sorgente + valore del flag di carry

dove per destinazione e sorgente vale quanto già detto per l’istruzione MOV.

Sono definiti tutti i 6 flag di stato come nell’istruzione ADD.

Page 43: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

43

Assembly 8086 – Operazioni Aritmetiche

SBB

E’ un’altra istruzione di sottrazione che consente di tener conto, nel calcolo, anche del riporto proveniente dall’istruzione precedente; il suo formato è:

SBB destinazione, sorgente

ed equivale alla forma Pascal:

destinazione:= destinazione –sorgente- valore del flag di carry

dove per destinazione e sorgente vale quanto già detto per l’istruzione MOV.

Sono definiti tutti i 6 flag di stato come nell’istruzione SUB.

Page 44: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

44

Assembly 8086 – Operazioni Aritmetiche

Incremento e decrementoINC e DEC

Oltre alle 4 operazioni aritmetiche tradizionali, il linguaggio assembly prevede delle istruzioni particolari per velocizzare le operazioni di incremento e d decremento unitario di registri e variabili.

Il loro formato è:INC sorgenteDEC sorgenteDove sorgente può essere il riferimento a un registro o a una variabile.Equivalgono rispettivamente alle forme Pascal:

sorgente:= sorgente+ 1 sorgente:= sorgente – 1

Sono definiti i flag di stato: Z, S, O, P, AN.B: Il flag C non è definito.

Page 45: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

45

Assembly 8086 – Dichiarazione variabili

DICHIARAZIONE DELLE VARIABILI

Tutte le variabili usate nel programma, eccezione fatta per i registri che possono essere considerati come variabili predefinite, devono essere dichiarate, in modo che l’assemblatore possa allocare in memoria, in base al tipo, il numero di byte necessari per la registrazione del loro valore.

Dato che il microprocessore opera solo con dati binari raggruppati in byte o parole, di 16 bit, il linguaggio assembly, che ricalca lefunzionalità del microprocessore 8086, prevede l’uso di due soli tipi di variabili: byte e word.

Page 46: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

46

Assembly 8086 – Dichiarazione variabili

DB e DW

La dichiarazione di una variabile di tipo byte, per la quale vengono riservati in memoria 8 bit, viene effettuata nel modo seguente:

nome della variabile DB valore

mentre per il tipo word vengono riservati 16 bit, e viene effettuata nel modo seguente:

nome della variabile DW valore

Nel caso in cui si voglia definire una variabile priva di valore di inizializzazione, è sufficiente inserire un ? al posto del valore.

N.B. Nell’emulatore EMU8086 la dichiarazione di variabili va inserita alla fine del programma, dopo l’istruzione HLT.

Page 47: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

47

Assembly 8086 – Dichiarazione variabili

Il valore di inizializzazione deve essere compatibile con la dimensione della variabile e deve appartenere ad una delle seguenti categorie di costanti:

Page 48: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

48

Assembly 8086 – Istruzioni di salto

.Il controllo di flusso è realizzato mediante le istruzioni di salto.Le istruzioni di salto permettono di specificare l’indirizzo dell’istruzione successiva da eseguire, in modo da modificare la normale sequenza di esecuzione. L’istruzione di destinazione può essere successiva (selezione) o precedente (iterazione) rispetto all’istruzione di salto.Le istruzioni di salto possono essere incondizionate (vengono sempre eseguite) o condizionate (vengono eseguite o meno in base al valore di determinati flag).Le istruzioni a cui si può arrivare mediante un salto possono essere individuate o mediante il loro indirizzo, o mediante un’etichetta. Un’etichetta in un programma rappresenta l’indirizzo di un’istruzione (l’assemblatore calcola l’indirizzo corrispondente all’etichetta).Le etichette sono specificate come segue:

nome:

N.B. in un programma non può essere assegnato a due etichette lo stesso nome.

Page 49: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

49

Assembly 8086 – Istruzioni di salto

. SALTI INCONDIZIONATIVengono eseguiti con l’istruzione JMP:

JMP operando

dove operando è l’indirizzo dell’istruzione da cui proseguire l’esecuzione (di solito è un’etichetta).

L’istruzione JMP permette di fare un salto a qualsiasi altro indirizzo, anche in un segmento diverso, ma è buona regola eseguire solo salti all’interno dello stesso modulo (del programma principale o della procedura).

Esempio:mov ax, 3hJMP dopomov bx, 5hdopo: mov ax, 8h

Page 50: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

50

Assembly 8086 – Istruzioni di salto

.

SALTI CONDIZIONATI

Si basano sul valore dei flag impostati dalle operazioni aritmetico-logiche e dall’istruzione CMP; se la condizione è falsa l’esecuzione continua in modo sequenziale, se la condizione è vera viene eseguito il salto.

L’istruzione CMP ha il formato:

CMP operando1, operando2

Page 51: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

51

Assembly 8086 – Istruzioni di salto

Per gli operandi valgono le stesse regole già viste per ADD e SUB.

L’istruzione CMP si comporta come una sottrazione; sottrae il secondo operando dal primo, ma non modifica nessun operando, cioè trascura il risultato e l’unico effetto è quello di impostare i flag di stato in base al risultato calcolato, in modo che possano essere utilizzati correttamente da una successiva istruzione di salto condizionato.

Ad ogni flag di stato (ZF,SF,OF,CF,PF) sono associate due istruzioni di salto condizionato: una che salta se il flag è a 1, l’altra (che contiene una N nel nome) che salta se il flag è a 0.

Page 52: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

52

Assembly 8086 – Istruzioni di salto

.

Il formato generale di una istruzione di salto condizionato è:

J<condizione> operando

Le istruzioni di salto per l'8086 sono:

JZ,JNZ,JS,JNS,JO,JNO,JC,JNC,JP,JNP

Es.; JZ salta se il flag Z è a 1, JNZ salta se il flag Z è a 0.

Page 53: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

53

Assembly 8086 – Istruzioni di salto

.

Ci sono poi altre istruzioni basate sugli stessi flag, ma più facili da ricordare:

JE salta se op1= op2 (equivalente a JZ)JNE salta se op1≠ op2 (equivalente a JNZ)

Page 54: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

54

Assembly 8086 – Istruzioni di salto

.

Per il confronto tra numeri con segno:

JL o JNGE salta se op1 < op2 (salta se il flag di segno è a 1)

JG o JNLE salta se op1 > op2 (salta se entrambi i flag di zero e di segnosono uguali 0)

JLE o JNG salta se op1 <= op2 (salta se il flag di zero è a 1 o il flag disegno è a 1)

JGE o JNL salta se op1 >= op2 (salta se il flag di segno è a 0)

Page 55: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

55

Assembly 8086 – Istruzioni di salto

.

Per il confronto tra numeri senza segno o tra caratteri (B below, A above):

JB o JNAE salta se op1 < op2 (salta se il flag di carry è a 1)JA o JNBE salta se op1 > op2 (salta se entrambi i flag di carry e di

zero sono 0)JBE o JNA salta se op1 <= op2 (salta se il flag di carry è a 1 o il

flag di zero è a 1)JAE o JNB salta se op1 >= op2 (salta se il flag di carry è a 0)

Page 56: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

56

Assembly 8086 – Istruzioni di salto

Esempio:

; se ah maggiore di al metti cx a 1mov al, 3hmov ah,5hCMP ah,alJG ahmaggioremov bx,1hahmaggiore: mov cx,1h

Page 57: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

57

Assembly 8086 – Istruzioni di salto

Nel processore 8086 le istruzioni di salto condizionato richiedono che l’indirizzo di destinazione sia abbastanza vicino (tra -128 byte e 127 byte, in modo da gestire l’indirizzo con un solo byte); se si supera la distanza consentita l’assemblatore segnala un errore. Per effettuare un salto condizionato ad una distanza maggiore ci si può servire di un salto incondizionato, che non presenta questo problema

L’istruzione

Jcond fine…

fine:

può essere riscritta come:

JNcond istrJMP fine

Istr:...

fine:

Page 58: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

58

Assembly 8086 – Istruzioni di salto

STRUTTURA CONDIZIONALERiprendendo l’esempio precedente:

; se ah maggiore di al metti cx a 1mov al, 3hmov ah,5hCMP ah,alJG ahmaggioremov bx,1hahmaggiore: mov cx,1h

è facile verificare che, nel caso in cui ah<al (es al=8) vengonomodificati sia i valori di bx che di cx.

Page 59: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

59

Assembly 8086 – Istruzioni di salto

La struttura condizionale ha il seguente diagramma di flusso:

CONDIZIONEV F

ISTRUZIONI SE VERO

ISTRUZIONI SE FALSO

Page 60: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

60

Assembly 8086 – Istruzioni di salto

Per codificare in assembly questa struttura, le istruzioni vanno scritte in sequenza. Allora proviamo a deformare il diagramma allungando e restringendo le linee di connessione, senza però modificare i punti di giunzione. Ci sono due possibilità: mettere prima le “istruzioni se falso” e poi le “istruzioni se vero” o viceversa.

Page 61: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

61

Assembly 8086 – Istruzioni di salto

Si può anteporre il blocco ELSE (istruzioni se falso) e posporre il blocco THEN (istruzioni se vero), infatti in assembly il salto avviene se la condizione è vera: Jcondizione THEN

istruzioni se falsoJMP ENDIFTHEN:

istruzioni se veroENDIF:

Page 62: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

62

Assembly 8086 – Istruzioni di salto

Si può anteporre il blocco THEN (istruzioni se vero) e posporre il blocco ELSE (istruzioni se falso), come in figura a

Figura a

CO NDIZIO INE

ISTRUZIO NI SE VERO

ISTRUZIO NI SE FALSO

V

SALTO CO NDIZIO NATO

SALTOINCO NDIZIO NATO

F

Page 63: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

63

Assembly 8086 – Istruzioni di salto

Poiché le istruzioni assembly sono fatte in modo da saltare quando la condizione è vera, occorre invertire Vero con Falso, e di conseguenzanegare la condizione, come in figura b

Figura b

NOT condizione

IstruzioniSe vero

Istruzioni se falso

F V

ELSE

END IF

SALTOCONDIZIONATO

SALTOINCONDIZIONATO

Page 64: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

64

Assembly 8086 – Istruzioni di salto

In entrambi i casi si può notare che per implementare una struttura di controllo condizionale sono necessarie due istruzioni di salto, una condizionata e una incondizionata.

Page 65: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

65

Assembly 8086 – Istruzioni di salto

ESEMPIDati due valori a e b calcolare il

minimo:

se a<b allora minimo=aaltrimentiminimo=bfine se

MOV al, aCMP al, bJL THENMOV ah, bMOV minimo,ahJMP ENDIFTHEN:MOV minimo,alENDIF:HLTa DB 4hb DB 7hminimo DB ?

MOV al, aCMP al, bJNL ELSEMOV minimo,alJMP ENDIFELSE:MOV ah, bMOV minimo,ah ENDIF:HLTa DB 4hb DB 7hminimo DB ?

oppure

Page 66: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

66

Esempio If

Realizzare un programma che:

inizializzi due dati a 8 bit in memoria;se il primo è più piccolo del

secondo esegua la moltiplicazione tra i due valori;se il primo è più grande o uguale al

secondo esegua la divisione tra il primo e il secondo;in ogni caso scriva il risultato in memoria (in una variabile a 16 bit da usare per tutti e due i casi)

START

In PRIMO

SECONDO

PRIMO <

SECONDO

RIS < --PRIMO * SECONDO

RIS < --PRIMO/SECONDO

END

V F

Out RIS

Page 67: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

67

Esempio If

; File COM é caricato all'indirizzo CS:0100hORG 100h

mov al, primocmp al, secondojl thenmov ah,0div secondo ;elsemov ah,00hmov risultato,axJMP endifthen:MUL secondomov risultato, axENDIF:Hlt

primo DB 6hsecondo DB 9h ;rieseguire invertendo i valoririsultato DW ?

Codice

Page 68: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

68

Esempio If

Corrispondenza tra il flow chart e il codice Assembly

Page 69: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

69

Assembly 8086 – Ciclo While

CICLO WHILE

L’iterazione è una struttura che permette di ripetere più volte l’esecuzione di un’istruzione strutturata, sotto il controllo di una condizione.La tipica struttura iterativa a controllo in testa è del tipo:

WHILE condizione

Istruzioni

Fine WHILE

condizione

istruzioni

Inizio while

Falso

Fine while

Vero

Page 70: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

70

Assembly 8086 – Ciclo While

Questa struttura può essere realizzata con le istruzioni di salto secondo lo schema:

inizio_whilese non è vera condizione salta a fine_whileistruzionisalta a inizio_while

fine_while

La struttura assembly corrispondente risulta essere:inizio_while:

CMP …JN condizione fine_while

<istruzioni>JMP inizio_while

fine_while<prosecuzione del programma>

Page 71: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

71

Assembly 8086 – Ciclo While

Esempio 1

Assegnare ad AL successivamente i valori da 0 a 7, usando un ciclo while

#make_COM#; Assegnare ad AL successivamente i valori da; 0 a 7, usando un ciclo while; File COM é caricato all'indirizzo CS:0100hORG 100hmov al,00hinizio_ciclo:

cmp al,07hjnl fine_mentreinc aljmp inizio_ciclo

fine_mentre:hlt

Page 72: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

72

Assembly 8086 – Ciclo While

Esempio 2

Inizializzare la variabile DATO con un numero naturalecalcolare la somma dei numeri da 1 a DATO usando unciclo while e memorizzare il risultato nella variabile SOMMA.

Page 73: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

73

Esempio Ciclo While

#make_COM#; File COM é caricato all'indirizzo CS:0100hORG 100h; Inizializzare la variabile DATO con un numero naturale; calcolare la somma dei numeri da 1 a DATO usando un ciclo ; while e memorizzare il risultato nella variabile SOMMAmov somma,0dmov cl,1dinizio_ciclo:

cmp cl,datojnbe fine_mentreadd somma, clinc cljmp inizio_ciclofine_mentre:

S T A R T

IND A T O

S O M M A < - - 0C O N T A T O R E < - - 1

C O N T A T O R E =

D A T O

S O M M A < - - S O M M A +C O N T A T O R E

C O N T A T O R E < - - C O N T A T O R E + 1

O u t S O M M A

E N D

F

V

Page 74: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

74

Esempio Ciclo While

Corrispondenza tra il flow chart e il codice Assembly

Page 75: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

75

Esempio While If

ESEMPIO 3

Calcolare quanti numeri divisibili per 3 sono compresi tra 20 e 30

START

NUMERO < -- 20DIVPER3 < -- 0

NUMERO = 30

RESTO < -- NUMERO MOD 3

RESTO = 0

DIVPER3 < -- DIVPER3 + 1

NUMERO < -- NUMERO + 1

OutDIVPER3

END

V

V

FF

Page 76: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

76

Esempio While If

#make_COM#; File COM é caricato all'indirizzo

CS:0100hORG 100h

iniziomentre;Cmp numero, 30dJNBE finementre; resto= numero MOD 3mov bl,3dmov al,numeromov ah,0ddiv blmov resto,ahcmp resto,0

je thenjmp fineifthen:inc DIVPER3fineif:inc numerojmp iniziomentrefinementre:hltNUMERO DB 20dDIVPER3 DB 0RESTO DB

Page 77: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

77

Esempio While If

Corrispondenza tra il flow chart e il codice Assembly

Page 78: Elementi di Assembly 8086 · 2019. 1. 6. · R. Napolitano - M. Esposito Settembre 2007 2 Assembly 8086 – I registri Per poter elaborare le informazioni ricevute dall’esterno,

R. Napolitano - M. Esposito Settembre 2007

78

F I N E