Apprendre l'assembleur
Résolu/Fermé
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 le solfège piano - Télécharger - Création musicale
- Apprendre l'anglais gratuitement - Télécharger - Divers Bureautique
- Apprendre la guitare - Télécharger - Simulation
14 réponses
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
13 déc. 2007 à 18:39
13 déc. 2007 à 18:39
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
Utilisateur anonyme
13 déc. 2007 à 18:52
13 déc. 2007 à 18:52
Merci.
Mais ces commandes-là c'est pour linux. Comment je fait pour compliler sous windows?
Mais ces commandes-là c'est pour linux. Comment je fait pour compliler sous windows?
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
13 déc. 2007 à 18:55
13 déc. 2007 à 18:55
Avec dev c++ ça doit être faisable.
Utilisateur anonyme
Modifié le 22 déc. 2007 à 21:28
Modifié le 22 déc. 2007 à 21:28
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
belhauss
Messages postés
69
Date d'inscription
dimanche 24 décembre 2006
Statut
Membre
Dernière intervention
9 février 2012
3
15 déc. 2007 à 22:00
15 déc. 2007 à 22:00
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
Utilisateur anonyme
17 déc. 2007 à 22:16
17 déc. 2007 à 22:16
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.
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
17 déc. 2007 à 23:31
17 déc. 2007 à 23:31
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)
Utilisateur anonyme
18 déc. 2007 à 18:39
18 déc. 2007 à 18:39
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.
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
18 déc. 2007 à 20:41
18 déc. 2007 à 20:41
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/
Utilisateur anonyme
22 déc. 2007 à 20:16
22 déc. 2007 à 20:16
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.
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
22 déc. 2007 à 21:03
22 déc. 2007 à 21:03
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....
kilian
Messages postés
8732
Date d'inscription
vendredi 19 septembre 2003
Statut
Non membre
Dernière intervention
5 février 2025
1 526
13 déc. 2007 à 19:13
13 déc. 2007 à 19:13
Ah oui mais non chuis bête, c'est du code qui ne passe que sous Linux: il utilise l'interruption 0x80 propre à Linux.