Nasm [Résolu]

Signaler
Messages postés
26
Date d'inscription
mardi 26 septembre 2006
Statut
Membre
Dernière intervention
15 janvier 2009
-
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
-
comment je fais pour designer un point d'entree avec nasm , org ne marche pas

5 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

il n'y a pas de PSP dans un fichier .com, le PSP est une structure crée en memoire par DOS. entre [0..FFh]
un fichier .com est un fichier binaire pur sauf qu'il est chargé en memoire a l'offset 100h donc tout tes acces memoire relatifs sont initialisés par rapport a cette adresse d'origine.
de plus, DOS prends soin de lancer le .com en ayant préalablement initialisé CS=DS=ES=SS, si tu fait un binaire pur, tu dois faire cette initialisation toi meme dans ton code.

@++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

c'est quoi que tu appelle un point d'entrée, c'est l'origine du programme (100h pour les coms) ou la fonction main,winmain qui est l'entry point de l'entete PE ?
sous quel systeme tu travaille ?

@++
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
2
Bonjour edf 102,

La définition d'un point d'entrée avec Nasm dépend du format de fichier que tu désires.
En format exe 32 bits compilé avec le format OMF (-fobj) tu devras définir ton point d'entrée ainsi:
..start:   ;définit le point d'entrée
mov eax,...   ; première instruction (à titre d'exemple)

Si tu utilises alink tu n'auras pas besoin de faire d'autre déclaration.

En format 32 bits compilé avec le format win (-fwin32) tu définiras le début de la façon suivante:

global debut     ;rend visible ce symbole par les autres modules


segment program public use32 class=CODE  ;nom section limitée à 8 caractères
 
debut:
suite du programme

puis avec alink tu utiliseras la directive
alink -oPE monprogramme.obj -entry debut

Si tu fais des exéutables 16 bits tu peux procéder de la même manière (excepté dans les directives définissant les différentes sections

Pour les .com tu as deux cas
Passage par un fichier binaire qui n'accepte pas les étiquettes, dans ce cas il n'y a rien à déclarer mais le point d'entrée sera le début de la section programme (à l'offset 100h)
Passage par un fichier obj (-fobj), idem que pour exe16 bits ou 32 bits excepté qu'il faut réserver les 256 octets
 resb 100h  ;reserve de la place pour implantation du programme en 100h (.com)
..start:mov dx,hello

Tu pourras consulter la doc de nasm (sur sourceforge.net) ou regarder une de mes sources qui donne des exemples de différents formats.

A+
Messages postés
26
Date d'inscription
mardi 26 septembre 2006
Statut
Membre
Dernière intervention
15 janvier 2009

ok merci
j'ai une autre question , si je veux faire un fichier binaire pur 16-bit en c , je cree un .com et j'efface le PSP
?
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
2
Bonjour,

Le fichier .COM créé est supposé commencer à l'adresse 100h, le segment de code étant celui défini par CS (pour ces fichiers CS=DS=ES=SS)
Si tu supprimes tout ce qui n'est pas du code tu auras un morceau de programme qui devrait pouvoir fonctionner dans la mesure ou toutes les adresses sont des adresses relatives.
Reste à savoir comment tu vas lancer ce programme ou si tu vas le rattacher à un autre programme existant.

A+