Un probleme en architectures des ordinnateurs

meriama_s Messages postés 99 Statut Membre -  
Aghaster Messages postés 26 Statut Membre -
bonjour
j'ai un probleme à resoudre un exercice en architecture des ordinateurs
j'espere que quelqu'un puisse resoudre cet exercice en expliquant bien les reponses:
On considere le programme suivant :
Mov ax , [0008]
Add al , FF
Cmp al , 00
Jne 0003

On suppose que ces instruction sont implementées à partir de l’offset 0 , on suppose que le processeur utilise le codege suivant :

Code operation------------------ operation

0206------------------------------ add al , adresse
04--------------------------------- add al , valeur
3A06------------------------------cmp al , adresse
3C--------------------------------- cmp al , valeur
74--------------------------------- jn adresse*
75-------------------------------- jne adresse*
A0 ------------------------------- mov al , adresse
A2--------------------------------mov adresse , al

Completer le tableau suivant en donnant l’etat des registre apres l’execution des instruction

Operation--------IP----------AL--------- FLAGS(zf,sf,cf,)--------- RA
Etat initiale------0000--------00---------1,0,0---------------------0000
Add al ,FF ------ ------- --------- ---------------------
Cmp al , 00 ----- ------- --------- ---------------------
Jne 0003 ------ ------ --------- --------------------

Et combien de boucle fait ce programme?
A voir également:

1 réponse

Aghaster Messages postés 26 Statut Membre 25
 
Ça fait un certain temps que j'ai fait de l'assembleur, mais je vais quand meme t'aider

Mov ax , [0008] // Initialise ax à 8h
Add al , FF // Ajoute FFh dans le low nibble du registre ax.
// 8h + FF = 107h.
// ax = 107h
// ah = 1h
// al = 7h
Cmp al , 00 // compare 0h avec 7h
Jne 0003 // Jump if not equal, on saute.

En combien de boucles fait ce programme? Répète lopération plusieurs fois:

107h + FFh = 206h
Est-ce que tu vois ce qui se passe? à chaque fois le lower nibble de ax (al) décrémente de 1.

C'est donc à la fin de la 8e boucle que al égalera 0, que cmp al, 00 sera retournera vrai. Je ne me rappelle plus quel flag cmp set, mais jne (jump if not equal) en tient compte et il ne sautera pas car al sera égal à 0h. J'espère avoir éclairé ta lanterne!

-Aghaster
www.planetcpp.info
0