私はブートローダを書いてNASM
アセンブラ(AS86
ではない)を使ってコンパイルしました。リアルモードでNASM、BCC、Ld86を組み合わせる:悪いマジックナンバー
ここで、私のアプリケーションに16ビットのC
コードを挿入する方法を学びたいと思います。私はいくつかのSOから、bcc
が8086プロセッサをサポートしているという事実のためにこのような状況にお勧めしていると読んでいます。 ld86: testasm.o has bad magic number
私は次の私のコードを削減:
testasm.asm:
[bits 16]
global foo
foo:
mov ax, 0x0e41
int 0x10
jmp $
C
テストコードと私のコードを組み合わせた時に
は、私は次のようなエラーに直面しました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
をどのように組み合わせるかを知っています。
ELFオブジェクト形式が導入される前は、Cプログラミング言語のシンボルの先頭に、レジスタ名とローカルラベルと区別するためのアンダースコアが付いていました。これはまだELFに適合しないので、1つのWindowsで行われます。 – fuz
情報ありがとうございました@fuz –