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

x86 32-bits / 64-bits Assembleur Discussion :

[NASM] Code 16 bits avec une directive 32 bits


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut [NASM] Code 16 bits avec une directive 32 bits
    Bonjour,

    si je compile le code suivant en 16bits, tout ce passe bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    [BITS 16]
    [ORG 0x0]
     
        mov al, '@'
        mov ah, 0x0E
        int 0x10
     
        mov al, '/'
        mov ah, 0x0E
        int 0x10
    me:
    jmp me
    ce code est chargé par un boot à l'adresse 0050:0000

    si je passe la directive en 32 bits, là ça m'affiche de '/' à l'infini.

    Je ne comprend pas

    Précision, j'exécute mon code sous Bochs

    si je désassemble le code compiler pour la partie 32 bits, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    00000000  B040              mov al,0x40
    00000002  B40E              mov ah,0xe
    00000004  CD10              int 0x10
    00000006  B02F              mov al,0x2f
    00000008  B40E              mov ah,0xe
    0000000A  CD10              int 0x10
    0000000C  E9FBFF            jmp word 0xa
    0000000F  FF                db 0xff
    00000010  FF                db 0xff
    il saute à l'Int et il rajoute deux 0xFF près le saut, est-ce un bug de NASM ?

    si je met un jump short, c'est bon ???

  2. #2
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Je viens de voir dans la doc :
    You do not need to specify BITS 32 merely in order to use 32-bit instructions in a 16-bit DOS program; if you do, the assembler will generate incorrect code because it will be writing code targeted at a 32-bit platform, to be run on a 16-bit one.
    Donc, il faut que je reste en BITS 16

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    C'est vrai en soi, mais ça ne nous dit pas pourquoi cela engendre un bug. En l'occurence, ton JMP a l'air généré et calculé pour revenir sur la dernière instruction (INT 10h), et ce n'est même pas une adresse multiple de 4 ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/07/2014, 10h35
  2. Développer une appli 64 bits avec PB
    Par Nicolas59 dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 24/02/2009, 10h27
  3. Comment faire un ORDER BY dynamique avec une direction?
    Par Danny Blue dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/03/2007, 01h46
  4. Générer une dll 16 bits avec delphi 7
    Par chtiot dans le forum EDI
    Réponses: 4
    Dernier message: 21/02/2006, 18h50
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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