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 :

Conseils pour début en asm


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut Conseils pour début en asm
    Salut

    je voudrais me mettre à l'assembleur
    mais je ne sais pas lequel utiliser
    je pense que ça doit se faire sur la machine qu'on possède
    donc pour ma part , il s'agit d'un portable HP modèle DV7 et tournant
    sous Win7 en 64 bits

    Pouvez-vous m'aiguiller sur l'assembleur à utiliser ainsi que sur l'EDI?

    également comme je suis débutant, je voudrais avoir des suggestions de tutoriels en ligne ou de titres de livres traitant sur l'asm


    J'ai aussi des questions.
    Est ce que l'assembleur (le code ) est lié à un cpu et/ou un OS en particulier?
    (notamment pour la syntaxe)

    Par exemple, est-il possible de faire de l'asm 68000 sur Windows 7 etc..

    Merci d'avance pour votre réponse !

  2. #2
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    pour débuter en assembleur il y a 3 bon tutoriaux qui sont présenté dans la tête de liste des sujet du forum assembeur

    ce qu'il faut savoir avec l'assembleur c'est qu'il y a un langage différent pour chaque famille de microprocesseur existant, dans ton cas c'est les processeur x64 (si tu veux programmer pour ton pc)

    commencer par travailler les processeur x86 est une bonne chose a faire car on trouve plus de documentation et tutoriaux sur ceux ci et les x64 sont dérivé des x86

    du coté des logiciel il te faut un éditeur de texte (avec une coloration syntaxique c'est mieux) et un compilateur adapté

    personellement j'uttilise gedit comme éditeur de texte mais celuis ci ne doit pas être dispo pour windows et nasm(quand je compile pour linux) ou fasm(quand je compile pour mon os ou pour dos) mais je ne sais pas s'ils compilent le x64

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Un code assembleur utilise le jeu d'instructions des processeurs. Donc, si tu n'utilise pas un simulateur (8086emu, DLX...) tu doit utiliser le jeu d'instruction du processeur de votre machine! Donc le code sera lié au cpu.
    De plus, certaines instructions sont liées à l'OS. Comme par exemple l'instruction int n pour exécuter un appel système dans un code assembleur. Avec windows n=0x21 et sous Linux n=0x80 !

    D'autre part, il existe deux syntaxes assembleur:INTEL et AT&T. L'assembleur nasm utilise la syntaxe INTEL et l'assembleur GNU utilise la syntaxe AT&T.

    Donc pour le jeu d'instructions un code assembleur est lié au CPU et pour la syntaxe il est lié à l'OS et à l'assembleur (INTEL ou AT&T).
    Dernière modification par Invité ; 28/06/2013 à 20h51.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    merci, je vais jeter un œil aux tutoriels et je voudrais savoir quel edi vous me recommander?


    entre la syntaxe intel et at & t, lequel est le plus facile ?

    il me semble que mon ordinateur est équipé d' un processeur AMD

    quelle est la différence entre un cpu intel et amd au niveau du jeu d'instructions?


    est-ce que qu'il me faut utiliser un assembleur en particulier ?

    et pour finir, y a-t-il une différence entre l'asm 32bits et 64 bits au niveau du codage ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    entre la syntaxe intel et at & t, lequel est le plus facile ?
    Personnellement j'utilise l'assembleur GNU sur Linux. Je trouve la syntaxe AT&T plus claire, élégant et facile à apprendre. Les compilateurs GCC et le noyau Linux utilise cet assembleur. Vous pouvez voir le code source du Kernel, pour s'assurer.

    Différence entre les deux syntaxes: http://www.ibm.com/developerworks/li...asm/index.html

    Je voudrais savoir quel edi vous me recommander?
    Sur Linux, vous pouvez utiliser un simple éditeur du texte pour écrire mon code assembleur, un makefile pour générer l'exécutable, le programme as pour assembler et le programme ld pour éditer les liens. Ces outils sont installés par defaut sur Linux en installant le compilateur gcc du langage C ou en installant le package Binutils.

    quelle est la différence entre un cpu intel et amd au niveau du jeu d'instructions?
    Voir ce page: http://www.minix3.org/doc/intelman.html

    est-ce que qu'il me faut utiliser un assembleur en particulier ?
    Pour coder votre propre programme assembleur, Non. Puisque tous les assembleurs génèrent le même code objet!

    différence entre l'asm 32bits et 64 bits au niveau du codage ?
    Codage ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    je suis sous Windows donc quel edi me faut-il ?

    et pour le codage, je veux dire quand on écrit le code, y a t il des différences si on programme en asm 32 ou 64 bits?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pour nasm il y a cet IDE : http://nasmide.sourceforge.net/

    Pour votre deuxième question, il y a 3 familles de processeurs: la famille x86 (32 bit) et la famille x86-64 (ou amd64 : les processeurs 64 bit de la famille x86) et la famille IA64.

    Avec les processeurs x86 et x86-64 il n y a pas de différence pour le codage. Le seul différence réside dans les noms des registres 64 bit (RAX, RBX, ...). Les processeurs x86-64 sont compatibles (extensions de x86) avec les processeurs x86. Le codage se diffère avec les processeurs IA64 car ils ne sont pas compatible avec l'architecture x86 !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    merci pour la réponse, et je voudrais savoir , mon ordinateur est en 64 bits, est-ce c'est aussi possible de programmer en 32 bits dessus ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Salut,

    Votre ordinateur est occupé par un processeur AMD donc c'est un x86-64 (x64) donc vous pouvez programmer en 32 bits (des codes destinés aux processeurs x86).

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    donc si j'ai bien compris les procs AMD ET INTEL comprennent les mêmes instructions ?

    ensuite je voudrais savoir la différence entre une interruption bios et une interruption logicielle?

    et à à quoi servent -elles?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Salut,

    donc si j'ai bien compris les procs AMD ET INTEL comprennent les mêmes instructions ?
    Les processeurs AMD sont des processeurs INTEL 64 bits, donc ils comprennent les mêmes instructions.

    je voudrais savoir la différence entre une interruption bios et une interruption logicielle?
    Une interruption BIOS permet d’accéder au matériel de l'ordinateur en mode réel (16 bit) dans un programme de boot par exemple. Une interruption logicielle est une interruption programmée permettant d'accéder au matériel en mode protégé (lorsque le système est chargé en mémoire). On peut exécuter une interruption logicielle dans un programme en exécutant un appel système (instruction int n).

    à à quoi servent -elles?
    C'est pour accéder au matériel de l'ordinateur: afficher des caractères à l'écran, saisir des caractères au clavier, ...

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Les processeurs AMD sont des processeurs INTEL 64 bits, donc ils comprennent les mêmes instructions.
    Attention à ne pas confondre la marque du processeur et son type...

    AMD et Intel sont deux marques différentes de processeurs produisant des processeurs de même type, donc compatibles.
    Les programmes tournant sur un proc Intel sont censés tourner sur un proc AMD et vice versa

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 105
    Points : 49
    Points
    49
    Par défaut
    j'ai encore des questions

    comment on programme l'accès aux périphériques en assembleur?

    je ne trouve rien dans les tutoriels, je pense que cet aspect est très technique ,ça doit être pour cela

    je voudrais bien comprendre la manière dont l'ordinateur et l'os interagissent

    merci encore

  14. #14
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 090
    Points
    43 090
    Par défaut processeurs AMD/Intel
    les processeurs intel et amd utilisent le même jeu d'instructions, les mêmes commandes et les mêmes registres. Le câblage interne pour arriver au même résultat sera différent mais le résultat ne le sera pas. Il y a des différences au niveau des fonctions de virtualisation ( mais à mon avis c'est pas de ton niveau ), je crois qu'avec AMD, le bus d'adresses est plus large sur les anciens CPU 32 bits ( adressage possible en 40 voire 48 bits je sais plus )

    Tu peux savoir le modèle de CPU, ses possibilités avec l'instruction CPUID. Pour du code de base, les différences ne comptent pas. A savoir qu'on ne programme quasiment plus en assembleur, les compilateurs étant capable de faire du code optimisé à partir du C de meilleure façon que l'humain. ( n'oublions pas que c'est quand même l'humain qui a crée le compilateur ... )

    L'accès aux périphériques est verrouillé par le système d'exploitation, tu y accèdes par des fonctions systèmes. A savoir qu'un CPU tourne en mode superviseur/utilisateur ( sur x86 ring0/ring3 ) le niveau utilisateur étant restreint, tu es en qq sorte sous le contrôle du système, dont 1 partie tourne en ring0. Si tu comptes programmer 1 driver, il te faut maitriser le système d'exploitation pour lequel il est développé, mais aussi l’électronique de ce que tu pilotes. Le driver sert justement à t'abstraire de tout cela, tu enverra une impression de la même façon sur 1 imprimante laser, 1 imprimante jet d'encre, 1 traceur, etc ... Sous unix par exemple, tout est fichier, tu peux balancer l'impression sur le fichier virtuel représentant l'imprimante A, le même fichier de la même façon sur le fichier virtuel imprimante B.

    Exemple d'affichage video en assembleur sous DOS, tu écris un code ASCII correspondant à 1 caractère à afficher à une adresse mémoire bien précise, la RAM vidéo est vue dans l'espace mémoire de la machine. EN mode graphique, il te faut activer le bon mode graphique soit en envoyant des valeurs bien précises sur les ports de commandes de la carte video ( cela est documenté dans les docs techniques ) , puis tu écris des pixels dans l'espace RAM de la carte vidéo, exemple 1 octet pour le rouge, 1 pour le vert, 1 pour le bleu. A partir de Windows ou linux, tu dois passer par le driver vidéo, et les fonctions système.

    Il est possible de développer un driver en C. C'est bien de comprendre le fonctionnement de l'assembleur mais peu utile à autre chose, à savoir qu'un compilateur dans sa phase de compilation génère du code assembleur.
    Pour l"accès bas niveau aux périphériques, regardes du coté de IOCTL.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Conseils pour débuts avec JSF
    Par axel119 dans le forum JSF
    Réponses: 7
    Dernier message: 09/04/2008, 11h26
  2. Réponses: 3
    Dernier message: 01/07/2003, 16h04
  3. Cherche conseil pour choisir mon orientation.
    Par AslDice dans le forum Débuter
    Réponses: 6
    Dernier message: 24/04/2003, 17h07
  4. Conseils pour poser votre question...
    Par Community Management dans le forum XMLRAD
    Réponses: 0
    Dernier message: 30/01/2003, 16h58
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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