Esercizi Assembly 1. Si scriva un programma assembly che: a

Transcript

Esercizi Assembly 1. Si scriva un programma assembly che: a
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++;
}
}