0% ont trouvé ce document utile (0 vote)
162 vues4 pages

Guide d'utilisation du simulateur RISC

Ce document décrit l'utilisation d'un simulateur RISC et liste les instructions d'un jeu d'instructions RISC. Il fournit des informations sur la création et l'exécution de programmes avec ce simulateur.

Transféré par

lartisanatduweb
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
162 vues4 pages

Guide d'utilisation du simulateur RISC

Ce document décrit l'utilisation d'un simulateur RISC et liste les instructions d'un jeu d'instructions RISC. Il fournit des informations sur la création et l'exécution de programmes avec ce simulateur.

Transféré par

lartisanatduweb
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Utilisation de RISC Simulator

Lien du simulateur: Http://[Link]/RISC/


Informations générales sur l’assembleur: [Link]

Aspect du simulateur:

8 registres R0 à R7
Registre LR (Link Register): adresse de retour pour une fonction (ie ligne d’où provient l’appel)
Registre PC (Program Counter): compteur d’instructions
Registre SP (Stack Pointer): adresse du haut de la pile (ici 400)
Assembly Language: zone de programme. On peut modifier le programme en cliquant dans la zone

SELECT pemet de charger des programmes prédéfinis.

LOAD permet de charger un fichier (texte) qui contient le programme (a priori l’extension du fichier n’a pas d’importance).

1
OPTIONS permet de choisir l’encodage des nombres et la
vitesse d’exécution.

RUN Exécution du programme


Pour une nouvelle éxécution du programme, il faut d’abord
faire RESET.

Création d’un programme:


▪ Soit en écrivant les instructions directement dans la zone programme
▪ Soit en écrivant le programme dans un fichier texte à l’aide d’un éditeur de texte (notepad++, word, openoffice...).

LISTE DES INSTRUCTIONS (cf instruction_set.pdf)


Entrée clavier
INP Rd, 2 lit un nombre et le place dans le registre Rd .
Sortie écran
OUT Rd, n affiche le contenu du registre Rd
sous la forme d’un nombre décimal signé (n = 4),
d’un nombre décimal non signé (n=5),
d’un nombre en hexadécimal (n=6)
ou d’un caractère ascii (n=7) .
Variables
nom DAT val crée la variable nom et affecte la valeur val
DAT val crée une variable sans nom de valeur val accessible par son adresse en mémoire= n° ligne du programme.
DAT crée une variable sans nom de valeur 0 accessible par son adresse en mémoire= n° ligne du programme.
Stockage d’une valeur en mémoire
STR Rd, adr stocke la valeur du registre Rd en mémoire à l’adresse adr.
nom_variable DAT valeur_variable
Entrée d’une valeur dans un registre
LDR Rd, adr transfère la valeur en mémoire à l’adresse adr dans le registre Rd.
LDR Rd, var transfère la valeur de la variable var dans le registre Rd.
MOV Rd, #val stocke la valeur val dans le registre Rd.
MOV Rd, adr la valeur en mémoire à l’adresse adr dans le registre Rd.
MOV Rd, reg stocke la valeur du registre reg dans le registre Rd. (reg=R0,...,R7,SP,LR,PC)
Opérations booléennes
AND Rd, Rn, Rp effectue Rn AND Rp et stocke le résultat dans le registre Rd.
ORR Rd, Rn ,Rp effectue Rn OR Rp et stocke le résultat dans le registre Rd.
XOR Rd, Rn , Rp effectue Rn XOR Rp et stocke le résultat dans le registre Rd.
Opérations sur la pile
PSH Rd empile le contenu du registre Rd dans la pile.
PSH {Rd-Rn} empile le contenu des registres Rd à Rn dans la pile.
POP Rd dépile dans le registre Rd.
Fin du programme
HALT arrêt du programme.

2
Opérations arithmétiques
ADD Rd, Rn, Rp ajoute le contenu du registre Rp au contenu du registre Rn et stocke le résultat dans le registre Rd.
ADD Rd, Rn ajoute le contenu du registre Rd au contenu du registre Rn et stocke le résultat dans le registre Rd.
ADD Rd, #val ajoute la valeur val au contenu du registre Rd et stocke le résultat dans le registre Rd.
ADD Rd, adr ajoute la valeur en mémoire située à l’adresse adr au contenu du registre Rd et stocke le résultat dans le
registre Rd.
SUB Rd, Rn, Rp soustrait le contenu du registre Rp au contenu du registre Rn et stocke le résultat dans le registre Rd.
SUB Rd, Rn soustrait le contenu du registre Rd au contenu du registre Rn et stocke le résultat dans le registre Rd.
SUB Rd, #val soustrait la valeur val au contenu du registre Rd et stocke le résultat dans le registre Rd.
SUB Rd, adr soustrait la valeur en mémoire située à l’adresse adr au contenu du registre Rd et stocke le résultat dans le
registre Rd.
MUL Rd, Rn multiplie le contenu du registre Rd par celui du registre Rn et stocke le résultat dans le registre Rd.
MUL Rd, #val multiplie le contenu du registre Rd par la valeur val et stocke le résultat dans le registre Rd.
MUL Rd, Rn divise le contenu du registre Rd par celui du registre Rn et stocke le résultat dans le registre Rd.
DIV Rd, Rn divise le contenu du registre Rd par celui du registre Rn et stocke le résultat dans le registre Rd.
MOD Rd, #val fait le modulo du contenu du registre Rd par la valeur val et stocke le résultat dans le registre Rd.
MOD Rd, Rn fait le modulo du contenu du registre Rd par le contenu de Rn et stocke le résultat dans le registre Rd.
MOD Rd, adr fait le modulo du contenu du registre Rd par la valeur à l’adresse adr et stocke le résultat dans le registre Rd.
NEG Rd, Rn renvoie l’opposé de Rn et stocke le résultat dans le registre Rd.
Liste des instructions de branchement (sauts conditionnels)
CMP Rd,Rn calcule Rd-Rn
Les instructions en vert doivent être précédées de l’instruction CMP.
BRA label BRanch Always Saut à la ligne label
JMS adresse JuMp to Subroutine Appel à une fonction
RET Subroutine RETurn Retour de fonction
BEQ adresse Branch if EQual Rd=Rn
BNE adresse Branch if Not Equal RdRn
BGT adresse Branch if Greater Than Rd>Rn signé
BGE adresse Branch if Greater than or Equal RdRn signé
BLT adresse Branch if Less Than Rd<Rn signé
BLE adresse Branch if Less than or Equal RdRn signé
BPL adresse Branch if positive (PLus) Rd-Rn0
BMI adresse Branch if MInus Rd-Rn0
BHI adresse Branch if HIgher than Rd>Rn non signé
BHS adresse Branch if Higher or Same RdRn non signé
BLO adresse Branch if LOwer than Rd<Rn non signé
BLS adresse Branch if Lower or Same RdRn non signé

3
Structures algorithmiques
▪ Si alors sinon
Si test alors CMP ..... // le test
instruction 1 BXX label1
Sinon instruction 2
instruction 2 BRA label_fin
label1 instruction 1
Fin si
label_fin ...
Pour une boucle, CMP doit être précédé d’un label et la fin de la boucle est représentée par BRA suivi du label
de CMP.
▪ Tant que
label CMP ..... // le test
Tant que test faire BXX label_fin
instructions instructions
Fin Tant que BRA label
label_fin ...
▪ Pour
label CMP Rn,Ri
Pour i= ? À ? faire par pas de ? faire BXX label_fin
instructions instructions
Fin Pour ADD Ri,#valeur du pas
BRA label
label_fin ...
Rn: valeur finale du compteur de boucles
Ri : valeur du compteur

Création d’une fonction


instructions:
JMS adresse JuMp to Subroutine Appel de la fonction située à la ligne adresse
RET Subroutine RETurn Retour au programme principal
▪ Définir une fonction en langage machine
Elle doit être placée à la fin du programme principal après l’instruction HLT.
label instruction Exemple:
... carre MUL R0,R0
RET RET
▪ Appeler une fonction
Il suffit de placer l’instruction suivante dans le programme principal: JMS label
Exemple:
fonction cube(a) INP R0,2
retour a*a*a JMS cube
OUT R0,4
HLT
cube STR R0,20
MUL R0,20
MUL R0,20
RET

Vous aimerez peut-être aussi