在实模式结合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 

,我仍然有问题。任何一个知道如何NASMbccld86结合在一起。

对于新来者,我发现这个问题。输出格式NASM应该是AS86以便与LD86兼容。 所以,

ASFLAGS=-f aout 

ASFLAGS=-f as86 

此外需要更换的,代码有一个问题: footestasm.asm_foo被替换,但不要问我为什么!

+1

引入了ELF格式对象之前,从C编程语言的符号用下划线从寄存器名称和本地标签区分它们被作为前缀。这仍然是在一个Windows上完成的,因为它们从来不会适应ELF。 – fuz

+0

感谢您提供的信息@ fuz –