我写了一个bootloader并使用NASM
汇编程序(不是AS86
)编译它,一切都运行良好。
现在,我想学习如何在我的应用程序中插入16位C
代码。我从几个SO中读到,bcc
推荐用于这种情况,因为它支持8086处理器。
在将我的代码与C
测试代码合并时,我遇到了以下错误:ld86: testasm.o has bad magic number
我将代码缩减为以下内容:
testasm.asm :
[bits 16]
global foo
foo:
mov ax, 0x0e41
int 0x10
jmp $
testc.c :
extern void foo();
main() {
foo();
}
和 Makefile :
CFLAGS=-0 -c
LDFLAGS=-T 0x7C00 -0
ASFLAGS=-f aout
all: testc.bin
testc.bin: testasm.o testc.o
ld86 -o $@ $^ $(LDFLAGS)
testc.o: testc.c
bcc -o $@ $^ $(CFLAGS)
testasm.o: testasm.asm
nasm -o $@ $^ $(ASFLAGS)
clean:
rm -f *.o testc.bin
我仍然有问题。任何人都知道如何将NASM
,bcc
和ld86
组合在一起。
答案 0 :(得分:3)
对于新来的人,我发现了问题。 NASM
的输出格式应为AS86
,以便与LD86兼容。
所以,
ASFLAGS=-f aout
应替换为
ASFLAGS=-f as86
此外,代码还有另一个问题:
foo
中的testasm.asm
应该替换为_foo
,但不要问我原因!