Un probleme en architectures des ordinnateurs

Fermé
meriama_s Messages postés 99 Date d'inscription jeudi 13 octobre 2005 Statut Membre Dernière intervention 20 août 2008 - 21 janv. 2006 à 15:55
Aghaster Messages postés 26 Date d'inscription dimanche 22 janvier 2006 Statut Membre Dernière intervention 27 janvier 2007 - 23 janv. 2006 à 02:57
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 Date d'inscription dimanche 22 janvier 2006 Statut Membre Dernière intervention 27 janvier 2007 25
23 janv. 2006 à 02:57
Ç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