This is an old revision of the document!
TP 11 - Assembly
In acest laborator vom folosi simulatorul pentru limbaj de asamblare https://schweigi.github.io/assembler-simulator/. Acesta simuleaza un procesor cu urmatoarele caracteristici:
4 Hz
4 registre de uz general A, B, C si D
un registru pentru instructiunea curenta IP
un regsitru pentru varful stivei SP
256 B RAM
24 B memorie video (ultimii bytes din memoria RAM)
Setul de instructiuni
Setul de instructiuni reprezinta comenzile pe care un procesor le poate executa. Acest procesor stie urmatoarele instructiuni:
mov - atribuire de date
add - adunare
sub - scadare
inc - incrementare
dec - decrementare
mul - inmultire
div - impartire
and - si pe biti
or - sau pe biti
xor - xor pe biti
not - negarea bitilor
shl - sifatre la stanga (echivalent cu inmultirea cu 2)
shr 0 siftare la dreapta (echivalent cu impartirea cu 2)
cmp - comparare
jmp - salt
j.. - salt (aici sunt mai multe instructiuni)
call - apel de functie
ret - intarcere din functie
hlt - oprirea procesorului
push - punerea pe stiva
pop - stergerea de pe stiva si punerea intr-un registru
Setul de instructiuni cu descrierea lor este disponibil pe site-ul simulatorului https://schweigi.github.io/assembler-simulator/instruction-set.html.
Exercises
Rulati programul initial si incercati sa va dati seama cum sa va scrieti numele la output (2p)
Scrieti un program care pune in registrele A, B, C si D numerele 1, 3, 5 si 7 (1p)
Scrieti codul pentru a calcula restul impartirii valorii din registrul A la valoarea din registrul B (1p)
Scrieti care afiseaza in output 0 de atatea ori cat valoarea din registru A. (2p)
Scrieti un program si o functie care calculeaza restul impartirii a doua variabile. Trimitei parametrii functiei folosind registre registre (1p).
Scrieti un program si o functie care calculeaza restul impartirii a doua variabile. Trimitei parametrii functiei folosind stiva (1p).
Scrieti un program si o functie care calculeaza dimensiunea unui string stocat sub forma unei variabile. Puteti incepe de la exemplul din primul program. Functia trebuie sa fie reapelabila din interiorul ei. (2p)
Bonus Scrieti un program si o functie care calculeaza sirul a(n) = a(n-1)*a(n-2), a(0) este 1 si a(1) este 2. (2p)