Bonjour,
Je viens de faire un petit programme en C qui crée un fichier COM pour MS-DOS / peut qu'il marche sur d'autre système DOS (testé sous MS-DOS 6.22).
En premier lieu j'ai créé un programme COM minimal en assembleur qui s'ouvre et se ferme directement sous DOS sans rien faire d'autre.
En visionnant le code hexadecimal de ce programme ça se résume à ceci:
J'ai voullu pour étude créer un logiciel en C capable de générer ce même programme en se lancant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part B8 00 4C CD 21
J'ai réussi au final a avoir un code similaire généré par mon programme C, cependant il y a 2 '0' en plus à la fin du fichier COM c.a.d ceci:
A savoir j'utilise la fonction C fwrite() pour générer du code dans mon fichier en mode binaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part B8 00 4C CD 21 00
Voici le code source du programme en C capable de générer le fichier COM éxecutable.
Dans l'exemple ici j'ai du faire quelques calcule pour tomber sur les chiffres en mode décimal pour correspondre aux chiffres hexadécimaux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <stdio.h> int main(void){ int a=0; FILE *fp; char str[8]; fp=fopen("file.com","wb"); if (fp==NULL) return -1; a=184; /*org 100*/ fwrite (&a,sizeof(a),1,fp); a=52556; fwrite (&a,sizeof(a),1,fp); a=33; fwrite (&a,sizeof(a),1,fp); fclose(fp); return 0; }
Ce concernant je n'ai pas vraiment tout compris car j'ai du inverser les lettre 4C CD en C4 DC pour effectuer mon calcul final
C*16^0 + 4*16^1 + D*16^2 + C*16^3 = 4CCD (C'est ce que je n'ai pas compris car c'est inversé par paire)
12+64+3328+49152=52556
21h = 33
Si vous pouvez m'explique la raison pour laquelle j'ai du inverser les lettres pour le calcul de 4CCD?
Aussi pourquoi fwrite() place 00 à la fin de mon fichier COM? Est-ce impossible d'omettre ce '00'?
Cependant le fichier COM final s'execute correctement.






Répondre avec citation










) en injectant du code assembleur dans DEBUG. Donc il peut aussi servir d'assembleur (je ne sais pas si c'est ça que tu à voulu me transmettre) bien que je le trouve moins pratique à utiliser qu'un assembleur traditionnel comme NASM, FASM ou TASM de Borland,...Mais je suis certain que le programme DEBUG offres d'autres possibilités que j'ignore encore.


Consultez nos FAQ : 
Partager