Un probleme en architectures des ordinnateurs
meriama_s
Messages postés
99
Statut
Membre
-
Aghaster Messages postés 26 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?
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:
- Sonia vient de créer son studio d'architecture à bruxelles
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Telecharger fl studio 20 pour pc gratuit complet - Télécharger - Édition & Montage
- Créer un compte gmail - Guide
1 réponse
Ç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
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