Apprendre l'assembleur
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je sais programmer en C et en C++, et maintenant, j'aimerai apprendre l'assembleur sous Windows.
Mais à chaque fois que je consulte un tutoriel, je trouve un code assembleur, je le teste mais erreur lors de la compilation. :(
C'est tiré de Wikipédia https://fr.wikipedia.org/wiki/Assembleur#Exemples_simples
.global _start
BONJ: .ascii "Bonjour\n"
_start: mov $4 , %eax
mov $1 , %ebx
mov $BONJ , %ecx
mov $8 , %edx
int $0x80
mov $1 , %eax
mov $0 , %ebx
int $0x80
Et c'est aussi que j'ai du mal à choisir le bon assembleur (MASM, FASM, TASM, NASM....):
SVP, pouvez-vous m'indiquer un bon tutoriel, et aussi quel assembleur choisir?
D'avance merci.
Je sais programmer en C et en C++, et maintenant, j'aimerai apprendre l'assembleur sous Windows.
Mais à chaque fois que je consulte un tutoriel, je trouve un code assembleur, je le teste mais erreur lors de la compilation. :(
C'est tiré de Wikipédia https://fr.wikipedia.org/wiki/Assembleur#Exemples_simples
.global _start
BONJ: .ascii "Bonjour\n"
_start: mov $4 , %eax
mov $1 , %ebx
mov $BONJ , %ecx
mov $8 , %edx
int $0x80
mov $1 , %eax
mov $0 , %ebx
int $0x80
Et c'est aussi que j'ai du mal à choisir le bon assembleur (MASM, FASM, TASM, NASM....):
SVP, pouvez-vous m'indiquer un bon tutoriel, et aussi quel assembleur choisir?
D'avance merci.
A voir également:
- Apprendre l'assembleur
- Application pour apprendre à coder - Guide
- Apprendre à lire le coran en français pdf - Télécharger - Histoire & Religion
- Apprendre l'anglais gratuitement - Télécharger - Divers Bureautique
- 1000 mots pour apprendre à lire - Télécharger - Éducatifs
- Apprendre le solfège piano - Télécharger - Création musicale
14 réponses
Aucun de tout celà, ça c'est la syntaxe "as" sous Linux.
Pour compiler, tu enregistres ça sous le nom bonjour.S et tu executes ces commandes:
Pour compiler, tu enregistres ça sous le nom bonjour.S et tu executes ces commandes:
as test.S -o test.o ld test.o -o test
Bon, je vien de trouver comment télécharger MASM32bits. Il faut aller ici http://masm32.online.fr/m32v9r.zip
Et pour la documentation et les tutoriels, il y a des dossier qui contiennent des exemples.
Et pour la documentation et les tutoriels, il y a des dossier qui contiennent des exemples.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Hello !!
voici un lien réalisé par mon Prof xD Oumnad http://z.oumnad.123.fr/
sélectioné Microprocesseurs ya un complitateur pour windows et même klk exeples et un pdf bien détaillé
Enjoy It
voici un lien réalisé par mon Prof xD Oumnad http://z.oumnad.123.fr/
sélectioné Microprocesseurs ya un complitateur pour windows et même klk exeples et un pdf bien détaillé
Enjoy It
Voilà, je lisai des docs sur l'assembleur, et puis je suis tombé sur ça :
Pour écrire des instructions en assembleur en C, il faut taper:
asm
{
/* instructions asm*/
}
J'ai tout de suite tésté ça, mair lors de la compilation, il y a l'erreur ----"Syntax error befor '{' token"-----
J'ai essayé de mettre asm comme une fonction ( en écrivant "asm ( ) ") mais rien à faire.
J'ai tésté cette méthode sous CodeBlocks et DevCpp, et pratiquement la meme erreur.
SVP, comment inclure des instructions en assembleur dans un programme en C?
D'avance merci.
Pour écrire des instructions en assembleur en C, il faut taper:
asm
{
/* instructions asm*/
}
J'ai tout de suite tésté ça, mair lors de la compilation, il y a l'erreur ----"Syntax error befor '{' token"-----
J'ai essayé de mettre asm comme une fonction ( en écrivant "asm ( ) ") mais rien à faire.
J'ai tésté cette méthode sous CodeBlocks et DevCpp, et pratiquement la meme erreur.
SVP, comment inclure des instructions en assembleur dans un programme en C?
D'avance merci.
Avec dev c++ logiquement c'est
ou alors pour être sûr que le code sera inséré là où il faut (sans optimisations):
Et la syntaxe doit être du AT&T et non pas intel.
Exemple, ce qui s'écrit comme ça en intel:
donnera en AT & T:
__asm__( /*instructions */)
ou alors pour être sûr que le code sera inséré là où il faut (sans optimisations):
__asm__ __volatile__( /*instructions */)
Et la syntaxe doit être du AT&T et non pas intel.
Exemple, ce qui s'écrit comme ça en intel:
mov eax, 1 push dword [eax+2]
donnera en AT & T:
movl $1, $eax pushl 2(%eax)
Merci.
Mais je dois avouer qu'en AT&T je ne m'y connais pas tellement, par contre en INTEL je connais les bases (et aussi que Intel est plus facil à écrire lol ).
SVP, Il n'y aurait pas un moyen pour faire de l'Intel depuis le compilateur?
Merci encore.
Mais je dois avouer qu'en AT&T je ne m'y connais pas tellement, par contre en INTEL je connais les bases (et aussi que Intel est plus facil à écrire lol ).
SVP, Il n'y aurait pas un moyen pour faire de l'Intel depuis le compilateur?
Merci encore.
A vrai dire il n'y a pas beaucoup de différence. C'est le même assembleur mais avec deux syntaxe différente, et peu de choses changent à vrai dire:
_Les opérandes sont inversés
_La taille d'une valeur n'est plus signalée par les mots dword, word ou byte, c'est juste une lettre à ajouter à l'opérateur.
Par exemple une instruction mov qui déplace 4 octets s'appelera movl (l pour long), pour 2 octets c'est movw (w pour word) et movb pour 1 octet (b pour byte). Ca évite de faire des
mov eax, dword machin
Les registres sont préfixés par le caractère % (ex: %eax) et les références mémoire se font avec des parenthèses en mettant l'incrémentation devant la parenthèse: [eax + 2] sera remplacé par 2(%eax)
Bon rassure-toi tu peux quand même utiliser la synatxe intel en utilisant la ligne
.intel_syntax noprefix
Voir https://codes-sources.commentcamarche.net/
_Les opérandes sont inversés
_La taille d'une valeur n'est plus signalée par les mots dword, word ou byte, c'est juste une lettre à ajouter à l'opérateur.
Par exemple une instruction mov qui déplace 4 octets s'appelera movl (l pour long), pour 2 octets c'est movw (w pour word) et movb pour 1 octet (b pour byte). Ca évite de faire des
mov eax, dword machin
Les registres sont préfixés par le caractère % (ex: %eax) et les références mémoire se font avec des parenthèses en mettant l'incrémentation devant la parenthèse: [eax + 2] sera remplacé par 2(%eax)
Bon rassure-toi tu peux quand même utiliser la synatxe intel en utilisant la ligne
.intel_syntax noprefix
Voir https://codes-sources.commentcamarche.net/
Merci.
Voilà, j'essayais de faire quelques essais, et j'ai écrit le code suivant :
#include <stdio.h>
#include <string.h>
int main()
{
int test=10;
asm (".intel_syntax noprefix");
asm ("mov eax, dword [test]");
asm (".att_syntax noprefix");
}
---------------------
Mais, après la compilation, l'erreur suivante apparait :
" Undifined reference to 'test' "
Pourtant j'ai bien écrit "int test = 10", mais ça n'a pas l'air de marcher.
SVP, comment remedier à cette erreur?
D'avance merci.
Voilà, j'essayais de faire quelques essais, et j'ai écrit le code suivant :
#include <stdio.h>
#include <string.h>
int main()
{
int test=10;
asm (".intel_syntax noprefix");
asm ("mov eax, dword [test]");
asm (".att_syntax noprefix");
}
---------------------
Mais, après la compilation, l'erreur suivante apparait :
" Undifined reference to 'test' "
Pourtant j'ai bien écrit "int test = 10", mais ça n'a pas l'air de marcher.
SVP, comment remedier à cette erreur?
D'avance merci.
Oui mais test n'a pas une adresse mémoire constante car c'est une variable locale, donc stockée dans la pile. Donc il n'a pas de référence.
Ca marchera si tu déclares test en tant que variable globale.
Sinon, tu peux accéder à la zone mémoire pointée par test ou encore au registre qui contient la valeur de test.
C'est décrit ici dans la partie "extended asm":
http://asm.sourceforge.net/articles/rmiyagi-inline-asm.txt
Sinon, à priori, test est situé dans la valeur pointée par esp. Mais si la compilation a été optimisée, il est possible que test ne soit qu'un registre....
Ca marchera si tu déclares test en tant que variable globale.
Sinon, tu peux accéder à la zone mémoire pointée par test ou encore au registre qui contient la valeur de test.
C'est décrit ici dans la partie "extended asm":
http://asm.sourceforge.net/articles/rmiyagi-inline-asm.txt
Sinon, à priori, test est situé dans la valeur pointée par esp. Mais si la compilation a été optimisée, il est possible que test ne soit qu'un registre....