Esercizi Assembly 1. Si scriva un programma assembly che: a) Stampi un punto di domanda (ASCII 63) b) legga un carattere da tastiera e memorizzi il suo codice ASCII nella variabile car c) vada a capo (equivale a stampare il carattere ASCII con codifica 10 seguito dal carattere con codifica 13) d) ristampi il carattere. 2. Si scriva un programma assembly che legga due caratteri, li memorizzi in due variabili, vada a capo e li stampi in ordine inverso. 3. Scrivere un programma assembly che sommi due numeri a trentadue bit (gli addendi vanno inizzializzate in sede di dichiarazione non sono richieste operazioni di I/O) 4. Scrivere un programma assembly che letti due numeri a due cifre calcoli e stampi la loro somma su tre cifre 5. Scrivere un programma assembly che letti due numeri a due cifre a, b e c calcoli e stampi a*b – 4*c. Si definiscano a,b,c ed il risultato come numeri a 16 bit (DW). 6. Si scriva il programma assembly che realizza il seguente frammento di codice C: void main() { int v2,v3; v2=6; cin>>v3; //V3 a due cifre v3=v3-v2; cout<<’A\n’; cout<<’B\n’; cout<<v3 v3=v3+v2; cout<<’C\n’; cout<<’D\n’; cout<<V3; } 7. Si scriva un programma assembly che dopo aver letto un numero n a due cifre, minore di 50 (non è necessario verificare l'input), stampi n+2 (numero a due cifre) e 2*n (numero a due cifre). 8. Si scriva un programma assembly che dopo aver letto tre numeri positivi ad una cifra (a, b, c) calcoli (senza stamparlo) b2-4ac 9. Si scriva il programma assembly che realizza il seguente frammento di codice C: void main() { int pezzi =2; int prezzo; int tot; int tot_sc int sconto=10; cout<<”A”; //codice ASCII 65 cout<<”\n”; cout<<”B”; cin>>prezzo //numero a due cifre tot=prezzo*pezzi tot_sc=tot-tot-sconto*prezzo/100 } 10. Scrivere un programma assembly che letti tre numeri minori di 255 calcoli e stampi il massimo (si supponga di avere a disposizione l'istruzione INPUT num che permette di di nserire un qualsiasi numero intero e memorizzarlo correttamente nella variabile num) 11. Scrivere un programma assembly che letto un carattere stampi tre '#' (codice ASCII 35) in diagonale se il carattere letto era 'D' ( codice ASCII 68 ) in orizzontale se il carattere letto era una 'O' (codice ASCII 79) una E (errore) ( codice ASCII 69) in qualsiasi altro caso. 12. Si scriva un programma assembly che letto un numero stampi: a) Una ‘N’ nel caso in cui il numero inserito sia il codice ASCII di una cifra (compreso tra 48 e 57) b) Una ‘C’ in caso contrario. (si supponga di avere a disposizione l'istruzione INPUT num che permette di di nserire un qualsiasi numero intero e memorizzarlo correttamente nella variabile num) 13. Si scriva un programma assembly che, ricevuti un numero ad una cifra ed una lettera, stampi tre ‘!’ (ASCII 33) nel caso in cui il numero inserito sia pari e tre ‘?’ (ASCII 63) nel caso in cui sia dispari. I tre caratteri andranno stampati in verticale orizzontale o diagonale a seconda della lettera inserita (V, D, O). (attenti a non complicarvi la vita inutilmente! SUGGERIMENTO: considerate i due controlli separatamente cioè prima stabilite il carattere da stampare e salvatelo poi pensate alla direzione.) 14. Si scriva il programma assembly che realizza il seguente frammento di codice C. Note: abbiamo a disposizione le istruzioni INPUT e OUTPUT; il codice ASCII della 'A' è 65 void main(){ int v2,v3; v2=6; cin>>v3; if (v3>15) { v3=v3-v2; if (v3>11) cout<<’A\n’; else cout<<’B\n’; } else { v3=v3+v2; if(v3>10) cout<<’C\n’; else cout<<’D\n’; } cout<<V3; } 15. Scrivere un programma assembly che letto un numero ad una cifra stampi i suoi primi dieci multipli (si vada a capo ad ogni iterazione ASCII 13+10. I multipli vanno stampati su due cifre). (si supponga di avere a disposizione l'istruzione INPUT num che permette di I nserire un qualsiasi numero intero e memorizzarlo correttamente nella variabile num e l'istruzione OUTPUT num che stampa il numero intero contenuto nella variabile num). Tutti i numeri saranno minori di 255. 16. Scrivere un programma assembly che dati n numeri calcoli il massimo (abbiamo a disposizione le istruzioni INPUT e OUTPUT) 17. Scrivere un programma assembly che lette n terne di numeri (si supponga che l’utente inserisca sempre le terne dal numero maggiore al numero minore) dica quante di queste terne possono essere i lati di un triangolo rettangolo. Suggerimento: si verifichi se vale il teorema di Pitagora. Note: abbiamo a disposizione le istruzioni INPUT e OUTPUT. 18. Si scriva il programma assembly che realizza il seguente frammento di codice C: int main(){ int i; i=1 j=4 while(i+j<100) { resto=j%3 if(resto==1) i=j+4; else i=i+2; j++; } }