在实模式结合NASM,BCC和Ld86:有坏的幻数
问题描述:
我写了一个引导程序和使用NASM
汇编(不AS86
)编译它,一切都完美的工作。在实模式结合NASM,BCC和Ld86:有坏的幻数
现在,我想学习如何插入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 [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
,我仍然有问题。任何一个知道如何NASM
,bcc
和ld86
结合在一起。
答
对于新来者,我发现这个问题。输出格式NASM
应该是AS86
以便与LD86兼容。 所以,
ASFLAGS=-f aout
应
ASFLAGS=-f as86
此外需要更换的,代码有一个问题: foo
在testasm.asm
应_foo
被替换,但不要问我为什么!
引入了ELF格式对象之前,从C编程语言的符号用下划线从寄存器名称和本地标签区分它们被作为前缀。这仍然是在一个Windows上完成的,因为它们从来不会适应ELF。 – fuz
感谢您提供的信息@ fuz –