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 :

Passage de l'asm 16 bits en 32 bits


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Passage de l'asm 16 bits en 32 bits
    Bonjour à tous, ça fait quelques jours que j'apprends l'Assembleur 16 bits et je pense avoir cerné le principal; j'ai fait mes deux premiers programmes mais j'ai appris qu'il existait l'assembleur 32 bits et qu'il facilitait la programation. N'ayant pas trouvé de tutos, je viens demander de l'aide ici : quels sont les différences entre les assembleurs 16 bits et 32 bits ?
    Je sais que les registres font 32 bits et une personne m'a dit qu'il y avait un modèle de mémoire plat sans segment, qu'est-ce que cela signifie ? Le code source ASM 32 bits est différent du 16 bits ?
    Avec mon éditeur TASM un programme asm se résume à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    .386
    code segment use16
    assume cs:code, ds:data, ss:pile
    debut:
    ;[...]
    debut ends
    data segment use16
    ;[...]
    data ends
    pile segment stack
    remplissage db 256 dup(?)
    pile ends
    end debut
    Que deviennent ces instructions en 32 bits ?

    J'espère avoir des réponses vite.

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 217
    Points : 105
    Points
    105
    Par défaut
    Pour finir de t'embrouiller, il se trouve qu'il y a plusieurs squelettes de programme assembleur, et je parle bien d'un même compilateur (tasm 4.2 en l'occurence).

    Par exemple, celui-ci est bien reconnu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    .model small
    .stack 100h
    .386
     
    .data 
    ; les données sont définie ici
     
    .code
    main proc
    mov ax, @data
    mov ds, ax ; ça sert surement pour remplacer la directive assume
     
    ; code ici
     
    main endp
    end main ; je ne voit pas pourquoi en finit deux fois la main, mais c'est comme ça
    En fait, moi aussi je voudrai en savoir un peu plus.

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par HacKSpideR
    j'ai apprie qu'il existait l'assembleur 32 bits et qu'il faciliter la programation.
    Disons que le 16 et le 32 bits ont chacun leurs problèmes. On a toutefois, c'est vrai, moins de choses à gérer en bas niveau en 32 bits.

    N'ayant pas trouver de tutos
    voir par exemple : http://win32assembly.online.fr/

    je vient demander de l'aide ici, quels sont les différences entre l'assembleurs 16 bits et 32 bits, je sais que les registres font 32 bits et une personne ma dit qu'il y'avais un modèle de mémoire plat sans segment, quesque cela signifie ?
    Les principales différences sont (outre la taille des registres) :

    - Le mode de segmentation : Comme tu le soulignais, le mode de segmentation est le mode de mémoire plat (flat memory model) en mode protégé 32 bits.

    En 16 bits, la mémoire est partagée en tranches (les segments) et chacune de ces tranches est dédiées à recevoir un partie spécifique (code pour CS, données pour DS, pile pour SS, etc.)

    En 32 bits protégé, la mémoire est dit "plate" parce que (presque) tous les segments ont la même adresse de base et la même taille. Cela signifie que la base et la taille de CS, DS, et SS sont les mêmes. Dans ce cas de figure il devient inutile de se servir des segments.

    en d'autres termes, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    mov eax, cs:[0x403000]
     
    ; vaut strictement
     
    mov eax, ss:[0x403000]
    Les deux instructions ci-dessus sont équivalentes.

    - Deuxième point important, le système d'exploitation :

    En 32 bits (ou même en 64 bits) on est "contraint" par le système d'exploitation sous-jacent, que ce soit par exemple Windows ou Linux. Les systèmes modernes utilisent tous ce qu'on appelle les anneaux de protections ("rings" en anglais) qui délimitent ce que peux faire :

    - l'utilisateur (mode utilisateur, user-mode ou encore "ring 3")
    - le système (mode noyau, kernel mode ou "ring 0").

    Le ring 0 à un contrôle total sur le ring 3 et par extension le ring 3 a des permissions réduites. Ce qui implique qu'on ne peut pas tout faire en ring 3 (certaines instructions sont illégales, on ne peut pas accéder à certaines parties de la mémoire, etc.)

    le code source ASM 32 bits est différent du 16 bits ?
    Il y a quelques différence du fait du mode mémoire plat. Plus besoin de déclarer les segments, ni à plus forte raison de les initialiser.

    Avec mon éditeur TASM un programme asm se résume à sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    .386
    code segment use16
    assume cs:code, ds:data, ss:pile
    debut:
    ;[...]
    debut ends
    data segment use16
    ;[...]
    data ends
    pile segment stack
    remplissage db 256 dup(?)
    pile ends
    end debut
    Que deviennent ces instructions en 32 bits ?
    Je ne connais pas très bien la syntaxe TASM... voici un exemple avec MASM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    .model flat, stdcall  ; modèle mémoire plat, convention d'appel standard
    option casemap :none  ; assembleur sensible à la casse (optionnel)
    
    .data ; donnée initialisées
    Foo BYTE 50
    
    .code ; code
    start: début du code
    
    mov eax, Foo ; eax = 50
    
    ; ...
    
    end start ; fin du code
    On voit qu'on a plus rien qui concerne les segments ici

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    de vos réponses je comprend mieu


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

Discussions similaires

  1. [2010] Passage Office 2010 64 bits vers 32 bits
    Par Harry Covair dans le forum Microsoft Office
    Réponses: 2
    Dernier message: 29/05/2012, 22h19
  2. Asm 32 bits en 16 bits?
    Par qnop dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 24/01/2012, 17h47
  3. Réponses: 1
    Dernier message: 16/07/2010, 20h54
  4. [debutante] Conversion 8 bits en 16 bits
    Par bolo dans le forum Algorithmes et structures de données
    Réponses: 28
    Dernier message: 06/12/2004, 23h20
  5. Machine 32 bits - cryptage 128 bits
    Par free0pen dans le forum Assembleur
    Réponses: 6
    Dernier message: 02/04/2004, 20h14

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