TP 10 - Assambleur
Vous devez
accepter l'assignment d'ici est travailler avec ce
repository:
Lab 10
Dans ce laboratoire, nous utiliserons le simulateur de langage d'assemblage https://schweigi.github.io/assembler-simulator/. Il simule un processeur avec les fonctionnalités suivantes:
4 Hz
4 registres à usage général A, B, C si D
un registre pour l'instruction IP actuelle
un registre pour le sommet de la pile SP
256 B RAM
24 B mémoire vidéo (derniers octets de RAM)
La description de simulateur este disponible ici.
L'ensemble d'instructions
L'ensemble d'instructions représente les commandes qu'un processeur peut exécuter. Ce processeur connaît les instructions suivantes:
mov - attribution de données
add - addition
sub - soustraction
inc - incrémentation
dec - decrémentation
mul - multiplication
div - division
and - et sur les bits
or - ou sur les bits
xor - xor
not - negation des bits
shl - décaler vers la gauche (équivalent a la multiplication par 2)
shr 0 siftare la dreapta (équivalent a la division par 2)
cmp - comparaison
jmp - saut
j.. - saut (plusieurs informations)
call - appel de fonction
ret - retour de la fonction
hlt - arrêt du processeur
push - ajouter dans la pile
pop - supprimer de la pile at ajouter dans un registre
L'ensemble d'instructions avec sa description est disponible sur le site Web du simulateur https://schweigi.github.io/assembler-simulator/instruction-set.html.
Exercises
Exécutez le programme initial. Changez le nom de la variable et essayez de comprendre comment écrire votre nom sur la sortie (2p)
Écrivez un programme qui place les nombres 0, 2, 4, 6 dans les registres A, B, C et D.(1p)
Écrivez le code pour calculer le reste de la division de la valeur du registre A par la valeur du registre B. Retournez la valeur de l'oppération 17%3
. Expliquez qu'est-ce qui se passe. (1p)
Écrivez un programme qui affiche 0 en sortie autant de fois que la valeur du registre C. Affichez dans la sortie 4 chiffres de 0. (2p)
Écrivez un programme qui comprend une fonction qui fait le swap entre deux variables. Envoyer les paramètres de fonction à l'aide des registres. Retournez le swap entre les registres A et B. (2p).
Écrivez un programme et une fonction qui calcule le reste de la division de deux variables. Envoyer les paramètres de fonction à l'aide de la pile. Verifiez pour 7%3
. (1.5p).
Écrivez un programme et une fonction qui calcule la taille d'une chaîne stockée en tant que variable. Vous pouvez partir de l'exemple du premier programme. La fonction doit être rappelable de l'intérieur et vous devez retourner la dimension de la chaîne dans le registre B. (2p)