[ASSEMBLEUR] problème compilo NASM
Tags :
- Programme
- Programmation
Dernière réponse : dans Programmation
mousk@IDN
4 Février 2007 11:53:33
Bonjour,
j'ai commencé le tutoriel de Benoît M. (bravo au passage
) sur l'assembleur.
http://benoit-m.developpez.com/assembleur/tutoriel/Cour...
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant
merci =)
" target="_blank">
N'ayant pas TASM, j'utilise NASM. Le code du premier programme génère des erreurs:
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant
merci =)
" target="_blank">http://benoit-m.developpez.com/assembleur/tutoriel/Cour...
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant
merci =)
" target="_blank">
N'ayant pas TASM, j'utilise NASM. Le code du premier programme génère des erreurs:
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant
merci =)
j'ai commencé le tutoriel de Benoît M. (bravo au passage

http://benoit-m.developpez.com/assembleur/tutoriel/Cour...
- .386
- code segment use16
- assume cs:code, ds:code, ss:code
- org 100h ;offsets décalés de 100h = 256
- debut :
- mov ah, 09h ;fonction n°9 : écrire une chaîne … l'écran
- mov dx, offset message ;mettre l'offset de la chaîne dans DX
- int 21h ;écrire la chaîne … l'écran en appelant l'interruption 21h
- ret ;rendre la main au DOS
- message db "Bonjour tout le monde !", '$' ;définition du message
- code ends
- end debut
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
bits 16
assume cs:code, ds:code, ss:code
org 100h ;offsets décalés de 100h = 256
debut :
mov ah, 09h ;fonction nø9 : ‚crire une chaŒne … l'‚cran
mov dx, offset message ;mettre l'offset de la chaŒne dans DX
int 21h ;‚crire la chaŒne … l'‚cran en appelant l'interruption 21h
ret ;rendre la main au DOS
message db "Bonjour tout le monde !", '$' ;définition du message
code ends
end debut
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
error: parser: instruction expected
error: comma or end of line expected
error: parser: instruction expected
error: parser: instruction expected
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant

merci =)
" target="_blank">
N'ayant pas TASM, j'utilise NASM. Le code du premier programme génère des erreurs:
.386
code segment use16
assume cs:code, ds:code, ss:code
org 100h ;offsets décalés de 100h = 256
debut :
mov ah, 09h ;fonction n°9 : écrire une chaîne … l'écran
mov dx, offset message ;mettre l'offset de la chaîne dans DX
int 21h ;écrire la chaîne … l'écran en appelant l'interruption 21h
ret ;rendre la main au DOS
message db "Bonjour tout le monde !", '$' ;définition du message
code ends
end debut
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
bits 16
assume cs:code, ds:code, ss:code
org 100h ;offsets décalés de 100h = 256
debut :
mov ah, 09h ;fonction nø9 : ‚crire une chaŒne … l'‚cran
mov dx, offset message ;mettre l'offset de la chaŒne dans DX
int 21h ;‚crire la chaŒne … l'‚cran en appelant l'interruption 21h
ret ;rendre la main au DOS
message db "Bonjour tout le monde !", '$' ;définition du message
code ends
end debut
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
error: parser: instruction expected
error: comma or end of line expected
error: parser: instruction expected
error: parser: instruction expected
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant

merci =)
" target="_blank">http://benoit-m.developpez.com/assembleur/tutoriel/Cour...
- .386
- code segment use16
- assume cs:code, ds:code, ss:code
- org 100h ;offsets décalés de 100h = 256
- debut :
- mov ah, 09h ;fonction n°9 : écrire une chaîne … l'écran
- mov dx, offset message ;mettre l'offset de la chaîne dans DX
- int 21h ;écrire la chaîne … l'écran en appelant l'interruption 21h
- ret ;rendre la main au DOS
- message db "Bonjour tout le monde !", '$' ;définition du message
- code ends
- end debut
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
bits 16
assume cs:code, ds:code, ss:code
org 100h ;offsets décalés de 100h = 256
debut :
mov ah, 09h ;fonction nø9 : ‚crire une chaŒne … l'‚cran
mov dx, offset message ;mettre l'offset de la chaŒne dans DX
int 21h ;‚crire la chaŒne … l'‚cran en appelant l'interruption 21h
ret ;rendre la main au DOS
message db "Bonjour tout le monde !", '$' ;définition du message
code ends
end debut
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
error: parser: instruction expected
error: comma or end of line expected
error: parser: instruction expected
error: parser: instruction expected
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant

merci =)
" target="_blank">
N'ayant pas TASM, j'utilise NASM. Le code du premier programme génère des erreurs:
.386
code segment use16
assume cs:code, ds:code, ss:code
org 100h ;offsets décalés de 100h = 256
debut :
mov ah, 09h ;fonction n°9 : écrire une chaîne … l'écran
mov dx, offset message ;mettre l'offset de la chaîne dans DX
int 21h ;écrire la chaîne … l'écran en appelant l'interruption 21h
ret ;rendre la main au DOS
message db "Bonjour tout le monde !", '$' ;définition du message
code ends
end debut
J'ai essayé de l'adapter pour NASM ce qui me donne le code suivant:
bits 16
assume cs:code, ds:code, ss:code
org 100h ;offsets décalés de 100h = 256
debut :
mov ah, 09h ;fonction nø9 : ‚crire une chaŒne … l'‚cran
mov dx, offset message ;mettre l'offset de la chaŒne dans DX
int 21h ;‚crire la chaŒne … l'‚cran en appelant l'interruption 21h
ret ;rendre la main au DOS
message db "Bonjour tout le monde !", '$' ;définition du message
code ends
end debut
Dans AsmEditor, la compilation par Nasm me renvoie "code de sortie de nasmw.exe:1" mais aucun fichier .com n'est créé.
Dans NasmIDE, ce code génère des erreurs:
error: parser: instruction expected
error: comma or end of line expected
error: parser: instruction expected
error: parser: instruction expected
Pouvez-vous m'indiquer le code à changer parceque c'est assez frustrant

merci =)
Autres pages sur : assembleur probleme compilo nasm
defaultuser
4 Février 2007 13:40:58
voila le code
BITS 16
ORG 100h
SECTION .data
message: db "Bonjour tout le monde !", '$'
SECTION .text
global main
main:
mov ah, 09h ;fonction n�9 : �crire une cha�ne � l'�cran
mov dx, message ;mettre l'offset de la cha�ne dans DX
int 21h ;�crire la cha�ne � l'�cran en appelant l'interruption 21h
ret ;rendre la main au DOS
mousk@IDN
4 Février 2007 14:22:28
Contenus similaires
Ne t'inquiète pas pour ça, l'assembleur est très proche de la machine, ce ne sont que quelques détails d'écriture qui changent, surtout ce qui permet de structurer le code (tout ce que tu viens de voir).
Le reste est proche du langage machine, tu peux décompiler le .COM pour voir que la compilation ne fait pas grand chose
Une autre différence serait des instructions qui ne seraient pas supporté par le compilateur, mais il y a toujours moyen de contourner.
Le reste est proche du langage machine, tu peux décompiler le .COM pour voir que la compilation ne fait pas grand chose

Une autre différence serait des instructions qui ne seraient pas supporté par le compilateur, mais il y a toujours moyen de contourner.
mousk@IDN
4 Février 2007 15:24:33
Merci cette fois-ci NASM veut bien me compiler ce petit fichier. Il me reste quand même quelques soucis:
- lorsque j'exécute le fichier .com, la fenêtre DOS s'ouvre puis se ferme instantanément, je ne sais pas si c'est normal ou pas.
- lorsque je veux compiler le fichier .ASM à partir de AsmEditor, aucune erreur n'apparaît avec le compilateur NASM mais aucun fichier n'est crée. Je pense que j'ai mal configuré le compilateur NASM dans AsmEditor.
Voici les caractéristiques que je lui ai mis:
nom du compilateur: NASM
lignes de commande: "E:\program files\nasm\nasmw.exe" "<Asm>" "<AsmNoExt><Ext>"
fichier généré: <AsmNoExt><Ext>
la case "effacer la fenêtre de résultats avant chaque compilation" n'est pas cochée.
la case "continuer le processus de compilation même en cas d'erreur" n'est pas cochée.
En fait j'ai pris les paramètres de FASM (compilateur par défaut) et je les ai adaptés pour NASM.
merci
- lorsque j'exécute le fichier .com, la fenêtre DOS s'ouvre puis se ferme instantanément, je ne sais pas si c'est normal ou pas.
- lorsque je veux compiler le fichier .ASM à partir de AsmEditor, aucune erreur n'apparaît avec le compilateur NASM mais aucun fichier n'est crée. Je pense que j'ai mal configuré le compilateur NASM dans AsmEditor.
Voici les caractéristiques que je lui ai mis:
Citation :
nom du compilateur: NASM
lignes de commande: "E:\program files\nasm\nasmw.exe" "<Asm>" "<AsmNoExt><Ext>"
fichier généré: <AsmNoExt><Ext>
la case "effacer la fenêtre de résultats avant chaque compilation" n'est pas cochée.
la case "continuer le processus de compilation même en cas d'erreur" n'est pas cochée.
En fait j'ai pris les paramètres de FASM (compilateur par défaut) et je les ai adaptés pour NASM.
merci

mousk@IDN
4 Février 2007 16:01:55
mousk@IDN
4 Février 2007 16:30:00
Merci beaucoup ça fonctionne à merveille !
Il ne reste qu'une chose qui me chagrine, c'est que je ne comprends pas trop le début du code:
BITS 16 indique qu'on travail en 16 bits
org 100h décale tout les offsets de 100h car il y a le PSP au début du segment
mais par contre je ne comprends pas:
est-ce que cela remplace le :
??
et oui je sais j'aime bien tout comprendre
par exemple quel serait le code pour le programme .exe qui suit plz ? après j'arrête avec mes questions
Il ne reste qu'une chose qui me chagrine, c'est que je ne comprends pas trop le début du code:
BITS 16 indique qu'on travail en 16 bits
org 100h décale tout les offsets de 100h car il y a le PSP au début du segment
mais par contre je ne comprends pas:
SECTION .data
SECTION .text
global main
est-ce que cela remplace le :
assume cs:code, ds:code, ss:code
??
et oui je sais j'aime bien tout comprendre

par exemple quel serait le code pour le programme .exe qui suit plz ? après j'arrête avec mes questions

CS, DS et SS sont des registres correspondant à Code Segment, Data Segment et Stack Segment.
donc CS contient l'adresse du début de zone du code exécutable, DS pour les données et SS pour la pile.
Dans le assume, tu places tous ces registres sur l'adresse "code".
Un .exe est un peu différent du .com, il y a format plus complet.
donc CS contient l'adresse du début de zone du code exécutable, DS pour les données et SS pour la pile.
Dans le assume, tu places tous ces registres sur l'adresse "code".
Un .exe est un peu différent du .com, il y a format plus complet.
mousk@IDN
4 Février 2007 18:18:33
oki donc en fait nasm se charge automatiquement de mettre les bonnes adresses sur les bons segments si je comprends bien.
J'ai un peu lu la documentation de NASM histoire de comprendre un peu comment ca se passe. j'ai compri que lorsque l'on fait un .COM, on met les données apres le
et le code apres le
apres par contre je ne connais pas pour les .exe
enfin bon y'a quand même pas mal de différences j'ai l'impression... (je viens de découvrir que NASM ne gerrais pas le "?" de TASM... enfin ou alors je l'ai mal écrit)...
vous connaissez pas une page où c'est expliqué ?
merci encore
J'ai un peu lu la documentation de NASM histoire de comprendre un peu comment ca se passe. j'ai compri que lorsque l'on fait un .COM, on met les données apres le
SECTION .data
et le code apres le
SECTION .text
apres par contre je ne connais pas pour les .exe
enfin bon y'a quand même pas mal de différences j'ai l'impression... (je viens de découvrir que NASM ne gerrais pas le "?" de TASM... enfin ou alors je l'ai mal écrit)...
vous connaissez pas une page où c'est expliqué ?
merci encore

mousk@IDN
4 Février 2007 21:12:21