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.

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.

Voici le code source du programme en C capable de générer le fichier COM éxecutable.

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;
}
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.
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.