Assembly 8086
Raccolta di esercizi per lavorare con il linguaggio Assembly 8086.
Esercizio 1: Primo programmino in Assembly (utilizzo del registro AX, istruzioni MOV, INC, DEC, ADD, SUB)
Scrivi un programma Assembly che esegua le seguenti operazioni:
Carica nel registro AX il valore ASCII del carattere 'C'.
Incrementa il valore di AX di 1.
Sottrai 12h al valore di AX.
Aggiungi 04h al valore di AX.
Sottrai 1Ah dal valore di AX.
Incrementa AX di 1.
Decrementa AX di 1 per due volte.
Aggiungi 02h al valore di AX.
Sottrai 3 al valore di AX.
Aggiungi 5 al valore di AX.
Consegnare in un file .doc (usare un elaboratore di testi come Microsoft Word o Google documenti) l'istruzione scritta in linguaggio Assembly e lo screenshot che mostra il contenuto di AX dopo ogni istruzione.
Inoltre, consegnare il file .asm contenente il codice Assembly 8086.
Esercizio 2: Un po' di conversioni (utilizzo del registro AX, istruzioni MOV, INC, DEC, ADD, SUB)
Scrivere un programma in Assembly 8086 indicando tutti i valori in esadecimale. Quindi se necessario prima di scrivere il codice effettuare le opportune conversioni.
Il programma deve essere in grado di:
caricare nel registro AX il valore ASCII del carattere 'p';
incrementa il valore di AX di 1;
Sottrai 12 al valore di AX.
Aggiungi (10011010)_2 al valore di AX;
Sottrai 35 al valore di AX;
Decrementa AX di 1;
Aggiungi A2h al valore di AX;
Aggiungi (10001110)_2 al valore di AX;
Aggiungi 125 al valore di AX;
Decrementa di 1 per due volte il valore di AX.
Ricorda che se un valore esadecimale inizia con una "lettera" oltre ad essere seguito dal simbolo h, deve essere preceduto dalla cifra 0. Ad esempio nel programma scriverai 0A2h e non A2h.
Consegnare il file .asm contenente il codice Assembly 8086. Il valore contenuto nel registro AX dopo aver eseguito le 10 istruzioni richieste dovrebbe essere 0286h.
Esercizio 3: Primi esempi con il registro base (utilizzo del registro BX, SI)
Scrivere un programma in Assembly 8086 indicando tutti i valori in esadecimale. Quindi se necessario prima di scrivere il codice effettuare le opportune conversioni.
Il programma deve essere in grado di:
assegnare al registro BX il valore A4A4h;
assegnare al registro SI il valore 32C7h;
Assegnare ad AX il valore che si trova all'indirizzo di memoria contenuto in BX;
Assegnare a DX il valore che si trova all'indirizzo di memoria usato combinando il registro BX con SI;
Sommare il valore di DX ad AX;
Somma 135 al valore di AX;
Sottrai 25 al valore di AL;
Somma (10111111)_2 al registro AH.
Consegnare il file .asm contenente il codice Assembly 8086.
Esercizio 4: Primi esempi con il registro contatore (utilizzo del registro CX)
Scrivere un programma in Assembly 8086 indicando tutti i valori in esadecimale. Quindi se necessario prima di scrivere il codice effettuare le opportune conversioni.
Il programma deve essere in grado di:
inizializzare a zero il registro AX;
Ripetere per 14 volte le seguenti operazioni:
a. Sommare il valore (00001010)_2 al registro AX:
b. Decrementare di 1 il valore di AX.Ripetere per 18 volte le seguenti operazioni:
a. Aggiungere 11 al registro AX;
b. Sottrai 4 al registro AX.
Consegnare il file .asm contenente il codice Assembly 8086. Quale è il contenuto del registro AX al termine dei due cicli?
Esercizio 5: lo SWAP (senza uso dell'istruzione XCHG)
Scrivere un programma in Assembly 8086 indicando tutti i valori in esadecimale. Quindi se necessario prima di scrivere il codice effettuare le opportune conversioni.
Il programma deve essere in grado di:
inizializzare a 42 il registro CX;
inizializzare a (00011101)_2 il registro DX;
effettuare lo swap tra il registro CX e DX usando come registro temporaneo di appoggio AX.
Consegnare il file .asm contenente il codice Assembly 8086.
Esercizio 6: il punteggio della squadra (variabili e cicli)
Scrivere un programma in Assembly 8086 che sia in grado di calcolare il numero di partite giocate ed il punteggio finale di una squadra di calcio conoscendo il numero di partite vinte, pareggiate e perse. Ricorda che nel calcio una squadra ottiene 3 punti per ogni partita vinta, 1 per ogni partita pareggiata e 0 punti per ogni partita persa.
Il programma deve:
Creare tre variabili (16 bit): vittorie, pareggi e sconfitte ed assegnagli un valore;
Creare le due variabili (16 bit) di output partite e punteggio, senza assegnargli un valore.
Calcolare il numero di partite giocate dalla squadra nel registro AX e assegnarlo alla variabile partite;
Calcolare nel registro AX il numero di punti che la squadra ha ottenuto e assegnarlo alla variabile punteggio.
Consegnare il file .asm contenente il codice Assembly 8086.
Esercizio 7: La media dei voti (DIV)
Scrivere un programma in Assembly 8086 che calcoli la media di tre voti memorizzati in variabili a 8 bit.
Dichiarare tre variabili (voto1, voto2, voto3) a 8 bit e assegnare loro un valore.
Creare una variabile media (8 bit) per memorizzare il risultato.
Creare una variabile resto (8 bit) per salvare il resto della divisione.
Sommare i tre voti e calcolare la media dividendo per 3.
Salvare il risultato nella variabile media.
Salvare il resto nella variabile resto.
Consegna: inviare il file .asm contenente il codice Assembly 8086.
Esercizio 8: Area del triangolo (MUL e DIV)
Scrivere un programma in Assembly 8086 che partendo dai valori di base e altezza sia in grado di calcolare l'area di un triangolo..
Dichiarare e inizializzare le variabili base e altezza (8 bit);
Dichiarare la variabile area (16 bit);
Calcolare il valore dell'area applicando la formula: area = base * altezza / 2.
Consegna: inviare il file .asm contenente il codice Assembly 8086.
Esercizio 9: Il quadrato (MUL e DIV)
Scrivere un programma in Assembly 8086 che calcola il lato e l'area di un quadrato conoscendo il valore del perimetro:
Dichiarare e inizializzare la variabile perimetro (8 bit);
Dichiarare le variabili lato (8 bit) e area (16 bit);
Calcolare il valore del lato usando il registro AX (ignorare il resto) ed assegnarlo alla variabile lato;
Calcolare il valore dell'area usando il registro AX ed assegnarlo alla variabile area.
Consegna: inviare il file .asm contenente il codice Assembly 8086.
Esercizio 10: Conversione da ore a minuti e secondi
Scrivere un programma in Assembly 8086 che date le tre componenti di un orario sia in grado di indicare il numero di secondi trascorsi dalla mezzanotte.
Dichiarare e inizializzare le variabili ore, minuti e secondi (8 bit);
Dichiarare la variabile secondiTot (16 bit);
Calcolare il valore dei secondi trascorsi a partire dalla mezzanotte fino all'orario indicato dalle tre variabili di input.
Ad esempio se ore vale 02h, minuti vale 03h e secondi vale 05h: ne segue che i secondiTot trascorsi sono 7385.
Cosa succede ad esempio se scegli come orario le 23:59:59? Ossia ore 17h, minuti 3Bh e secondi 3Bh?
Consegna: inviare il file .asm contenente il codice Assembly 8086.
Esercizio 11: Studente maggiorenne (Selezione semplice CMP e salti condizionati)
Scrivere un programma in Assembly 8086 che sia in grado di indicare se uno studente è maggiorenne oppure no.
Dichiarare e inizializzare la variabile eta (8 bit);
Dichiarare la variabile maggiorenne (8 bit) e inizializzarla a zero;
Se lo studente è maggiorenne il programma deve assegnare il valore 1 alla variabile maggiorenne.
Consegna: inviare il file .asm contenente il codice Assembly 8086.
Esercizio 12: Voto non sufficiente (Selezione semplice CMP e salti condizionati)
Scrivere un programma in Assembly 8086 che sia in grado di indicare se un voto ricevuto da uno studente sia insufficiente.
Dichiarare e inizializzare la variabile voto(8 bit);
Dichiarare la variabile insufficiente(8 bit) e inizializzarla a zero;
Se il voto è insufficiente il programma deve assegnare il valore 1 alla variabile insufficiente.
Consegna: inviare il file .asm contenente il codice Assembly 8086.
Esercizio 13: Valore diverso da zero (Selezione semplice CMP e salti condizionati)
Scrivere un programma in Assembly 8086 che sia in grado di verificare se il contenuto dei registri AX, BX, CX, e DX è diverso da zero. In caso affermativo si azzera il contenuto di tale registro.
Consegna: inviare il file .asm contenente il codice Assembly 8086.