IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Compilateur asm, comment ça fonctionne ?


Sujet :

Assembleur

  1. #21
    Membre actif Avatar de amaury pouly
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 157
    Points : 224
    Points
    224
    Par défaut
    Tu as l'esprit un peu embrouillé à ce que je vois .
    Tout d'abord le cpu sait si c'est un mot ou double-mot selon l'octet r/m de l'instruction(sauf quelques instructions ou cela dépend si le cpu est en mode 16-bit ou 32-bit) .

    Ensuite ler cpu exécute ce que tu lui dis . Quand l'Os charge un prog il informe le cpu où commence le code . çà veut dire que si l'OS décide d'exécuter la section .data et bien le cpu ni verra aucun inconvénient puisque pour lui les section n'existe pas . La seul chose que connais le cpu c'est: ou commence la section de code, de données .

    Pour le coup du hello world et bien regarde:
    donc là si pointe sur le premier octet de ta chaîne
    charge un octet pointé par si dans al puis incrémente(ou décrémente) si .
    quand cet octet vaut 0 on est à la fin de la chaîne .
    Le cpu ne sait pas ce qui est pointé par si simplement il le charge . C'est au programmeur de savoir ce qu'il fait .

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Le mod r/m ne définit ni le nombre de bits d'adressage, ni le nombre de bits d'opérande. Il définit simplement la taille du déplacement dans l'adressage, 0, 8 ou 16/32.

    C'est généralement l'opcode qui définit la taille d'opérande. Pour donner un exemple précis, l'instruction ADD ou SUB :

    ADD r/m8, r8 -> Opcode 00h
    ADD r/m16, r16 -> Opcode 01h
    ADD r8, r/m8 -> Opcode 02h
    ADD r16, r/m16 -> Opcode 03h

    SUB r/m8, r8 -> Opcode 28h
    SUB r/m16, r16 -> Opcode 29h
    SUB r8, r/m8 -> Opcode 2Ah
    SUB r16, r/m16 -> Opcode 2Bh

    Intel a été encore plus pervers en définissant carréement pour les instruction courantes un bit dans l'opcode qui dirait si l'instruction est 8 ou 16 bits. Il n'y a pas de doute, ici, c'est le bit de poid faible :

    00h : 0000 0000 -> Bit 7 = 0 : Opérande de 8 bits
    01h : 0000 0001 -> Bit 7 = 1 : Opérande de 16 ou 32 bits
    02h : 0000 0010 -> Bit 7 = 0 : Opérande de 8 bits
    03h : 0000 0011 -> Bit 7 = 1 : Opérande de 16 ou 32 bits

    28h : 0010 1000 -> Bit 7 = 0 : Opérande de 8 bits
    29h : 0010 1001 -> Bit 7 = 1 : Opérande de 16 ou 32 bits
    2Ah : 0010 1010 -> Bit 7 = 0 : Opérande de 8 bits
    2Bh : 0010 1011 -> Bit 7 = 1 : Opérande de 16 ou 32 bits

    Ce n'est pas la seule chose que l'ont peut remarquer. Le bit précédent désigne aussi le sens de l'opération.

    00h : 0000 0000 -> Bit 6 = 0 : r/m <- r
    01h : 0000 0001 -> Bit 6 = 0 : r/m <- r
    02h : 0000 0010 -> Bit 6 = 1 : r <- r/m
    03h : 0000 0011 -> Bit 6 = 1 : r <- r/m

    28h : 0010 1000 -> Bit 6 = 0 : r/m <- r
    29h : 0010 1001 -> Bit 6 = 0 : r/m <- r
    2Ah : 0010 1010 -> Bit 6 = 1 : r <- r/m
    2Bh : 0010 1011 -> Bit 6 = 1 : r <- r/m

    L'opérande définit toujours quelles sont les opérandes. Lorsque ce sont des opérandes de type, r/m le mod r/m donne la signification de r/m.

    Donc le processeur fait des choses très stupides, il ne sait pas ce que ca signifie. C'est à toi de donner un sens aux objets qu'il manipule.

Discussions similaires

  1. [Vs.Net & SQL Serveur] Comment faire fonctionner le Débu
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/08/2005, 19h23
  2. Comment faire fonctionner une scroll bar ???
    Par toto4650 dans le forum MFC
    Réponses: 10
    Dernier message: 18/07/2005, 16h47
  3. [JToolTip] comment ca fonctionne ?
    Par Terminator dans le forum Composants
    Réponses: 2
    Dernier message: 29/05/2005, 15h18
  4. [Chat] Comment faire fonctionner Flash 7 sous Debian ?
    Par piff62 dans le forum Evolutions du club
    Réponses: 22
    Dernier message: 07/03/2005, 15h27
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo