Ich schrieb einen Bootloader und kompilierte es mit NASM
Assembler (nicht AS86
), alles funktionierte perfekt.Kombinieren NASM, BCC und Ld86 im Real-Modus: hat schlechte magische Nummer
Nun möchte ich lernen, wie 16-Bit C
Code in meine Anwendung einfügen. Ich lese von mehreren SOs, dass bcc
für solche Situationen aufgrund der Tatsache empfohlen wird, dass es 8086-Prozessoren unterstützt.
Während meines Code mit einem C
Testcode kombiniert konfrontiert ich folgende Fehlermeldung: ld86: testasm.o has bad magic number
ich meinen Code auf das folgende reduziert:
testasm.asm:
[bits 16]
global foo
foo:
mov ax, 0x0e41
int 0x10
jmp $
testc.c:
extern void foo();
main() {
foo();
}
und die 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
und ich habe immer noch das Problem. Jeder weiß, wie man NASM
, und ld86
zusammen kombiniert.
Vor der Einführung des ELF-Objektformats wurde Symbolen aus der C-Programmiersprache ein Unterstrich vorangestellt, um sie von Registernamen und lokalen Bezeichnungen zu unterscheiden. Dies ist immer noch ein Windows, da sie ELF nie angepasst haben. – fuz
Danke für die Information @fuz –