Nasm

Résolu
edf102 Messages postés 26 Date d'inscription mardi 26 septembre 2006 Statut Membre Dernière intervention 15 janvier 2009 - 28 mars 2007 à 21:16
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 31 mars 2007 à 07:05
comment je fais pour designer un point d'entree avec nasm , org ne marche pas

5 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
31 mars 2007 à 07:05
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.

@++
3
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
28 mars 2007 à 23:25
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 ?

@++
0
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
29 mars 2007 à 08:40
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+
0
edf102 Messages postés 26 Date d'inscription mardi 26 septembre 2006 Statut Membre Dernière intervention 15 janvier 2009
30 mars 2007 à 15:13
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
?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nasman Messages postés 202 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 29 septembre 2008 3
30 mars 2007 à 15:34
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+
0
Rejoignez-nous