fonctionnement processeur

fonctionnement processeur - ASM - Programmation

Marsh Posté le 06-02-2005 à 23:15:31    

Salut,jai un pb avec le fonctionnement basique du processeur 8086
 
En fait si on prend un exemple simple,linstrcution,
Add RegA,XX  (regA<-regA + [XX])
 
Dans un premier temps,on va chercher en memoire le code de
cette operation  
donc:
 
0  :adresse<-IP;       ;     ;            ;READ
 
On incremente le pointeur dinstruction pour quil pointe a la case memoire suivante?
 
1  TampA<-IP;TempsB<-Reg1;UAL<-TempA +TempB;IP<-UAL;READ
 
------------------------------------------------------------------
Apres jai pas trop compris,aparemment on fait intervenir un bout du processeur qui va executer le code que lon a ramener de la memoire(qui fait 1 octet en taille)
donc on a:
-----------------
 
2       ;      ;UAL<-donne  ;INST<-UAL  ;jmp uprog[INST]
 
---------------------
Apres jai pas trop compris,ce que fait le microprocesseur,
est quil va savoir automatiquement ce que dans cette octet,
qui comprend (Add regA),il devra faire quoi en fait?stocker que
Add est loperation a faire et que regA est le registre a sommer?
mais ou il va le stocker?
je continue la suites instruction:
-----------
 
 
20   Adresse IP;        ;        ;         ;
21 TampA<-IP;TempsB<-Reg1;UAL<-TempA +TempB;IP<-UAL;READ
22            ;         ; UAL<-donne   ;INST<-UAL;
 
---------------
Apres,la je vois pas linteret de ces 3 instrcutions,
on incremente le pointer dinstrcution,mais quel est linteret puisque lon a deja incremtenter et que maintenant y va pointer vers la case memoire qui nous interesse pas.?
Ds le cours ya marque "lecture de la valeur XX en memeoire"
--------------------------
 
23 adresse <- INST ;  ;   ;   ;read
24          ;       ;      ;  ;        
------------
LA je comprend plus,ya marquer "lecture de la valeur situe a ladresse XX.On a recuperer l'adresse pointer par XX,et on va maitenant recuperer
la valeur contenue dans cette adresse?
 
------------
25       ;TampB-RegA;UAL<-Dones+tampB;reg UAL ;jmp o$
 
Bon la uassi je saisit plus,en fait je me melange entre ce que fait le micropogramme et ce que nous on doit faire,en fait jai pas trop compris le passage de la ligne 2 a 20,et le reste aussi
 
 
donc si quelqun peut mexpliquer mes erreurs

Reply

Marsh Posté le 06-02-2005 à 23:15:31   

Reply

Marsh Posté le 23-02-2005 à 14:39:54    

arrete de boire :
ligne 20 sere a recuperé l'adresse de xx
puis il va lire la valeur de xx .... et bla bla ...

Reply

Marsh Posté le 28-02-2005 à 09:06:25    

nohack a écrit :

Salut,jai un pb avec le fonctionnement basique du processeur 8086


 
C'est clair :).
Tout d'abord, il y a deux choses: la structure de l'instruction en machine, et la façon dont le processeur la traite.
La première est déterminée par la compatibilité x86.
La seconde est laissée à la discrétion du fondeur (AMD, Intel, ..) et dépend du modèle. La référence à du microcode dans le cas d'un 8086 pour une ADD AX, [mem] me paraît étrange. A mon avis, c'est du câblé.
 
Ce qu'on peut faire, c'est dépiauter l'instruction et voir comment le processeur peut exécuter sans ambiguïté ce que le programmeur souhaite.
 
Il faut de la doc. Celle de Intel est correcte. Pour télécharger, Google ou par exemple:
http://assembleur.maurette.free.fr [...] htm#080804
Voir dans le Vol2, les paragraphes "Instruction Format" (c'est velu) et bien sûr "ADD-Add" dans "Instruction set reference". Une version un peu ancienne peut être plus facile dans notre cas, les instructions x86-64 étant confusantes.
 
Pour manipuler, si vous avez accès à une machine sous DOS/Windows, vous lancez DEBUG, et vous faîtes:

-a 100
/..../add ax, [115]
/..../[return]


Puis:

-u 100


Vous lirez:

0D39:0100 03061501      ADD     AX,[0115]


 
Ce qui est intéressant, c'est 03061501, qui peut se lire (little endian): 03, 06, 0115
 
Le µP rencontre d'abord 03. Il sait ainsi qu'il s'agit d'une instruction de type ADD r16, r/m16 (il élimine ADD r32, r/m32 car il est en mode 16 bits)). Ce qui signifie une addition entre un registre cible (inconnu pour l'instant) 16 bits et en opérande soit un registre 16 bits, soit le contenu d'une mémoire 16 bits. Pour en savoir plus, il lit 06. Ce 06, en fait 00-000-110 vu en binaire, il l'interprêtre très facilement, ce qui n'est pas notre cas. En regardant la doc Intel (description du byte ModR/M), on constate que:
- Les 2 premiers bits (Mod) nous situent dans des modes d'adressages "simples".
- Les 3 derniers (R/M) déterminent que l'opérande est en mémoire.
- Les trois du milieu (Reg/Opcode), dont le sens dépend de tout ce qui précède :pt1cable: , nous dit que le registre cible est AX.
 
Maintenant, le µP en sait assez. Il n'attend plus que les 4 octets de l'offset (dans DS) de la donnée à additionner, qu'il va présenter sur le bus d'adresse pour récupérer la donnée dans l'ALU pour addition.
 
Ce schéma est à peu près respecté pour un 8086. Un ADD AL, [mem] se fera sans doute en 3 cycles, un ADD AX, [mem] sensiblement plus à cause de l'accès multiplexé.
 
Sur une version récente, l'instruction à mon avis ne prendra qu'un cycle, et généralement moins au sein du flux d'instructions.
 
--  
Pierre

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed