J'ai écrit un chargeur de démarrage et l'ai compilé en utilisant NASM
assembleur (pas AS86
), tout fonctionnait parfaitement.Combinaison de NASM, BCC et Ld86 en mode réel: a un mauvais nombre magique
Maintenant, je veux apprendre comment insérer le code C
16 bits dans mon application. J'ai lu de plusieurs SO que bcc
est recommandé pour de telles situations en raison du fait qu'il prend en charge 8086 processeurs.
En combinant mon code avec un code de test C
je faisais face à l'erreur suivante: ld86: testasm.o has bad magic number
Je réduit mon code à ce qui suit:
testasm.asm:
[bits 16]
global foo
foo:
mov ax, 0x0e41
int 0x10
jmp $
testc.c:
extern void foo();
main() {
foo();
}
et le Makefile :
CFLAGS=-0 -c
LDFLAGS=-T 0x7C00 -0
ASFLAGS=-f aout
all: testc.bin
testc.bin: testasm.o testc.o
ld86 -o [email protected] $^ $(LDFLAGS)
testc.o: testc.c
bcc -o [email protected] $^ $(CFLAGS)
testasm.o: testasm.asm
nasm -o [email protected] $^ $(ASFLAGS)
clean:
rm -f *.o testc.bin
et j'ai encore le problème. Tout le monde sait comment combiner NASM
, bcc
et ld86
tous ensemble.
Avant l'introduction du format d'objet ELF, les symboles du langage de programmation C étaient préfixés d'un trait de soulignement pour les distinguer des noms de registre et des étiquettes locales. C'est encore fait un Windows car ils n'ont jamais adapté ELF. – fuz
Merci pour l'information @fuz –