我在實模式下編寫C程序。該程序將被加載到0x2000:0x0000
地址並運行。 DS
寄存器等於CS
,即0x2000
。另外我正在用bochs進行調試。BCC中的內聯彙編(Bruce's C編譯器) - 如何使用C變量?
我的目標是在屏幕上打印一些文字。所以我需要內聯彙編(BIOS INT 10h
)。
這裏是我的測試文件:
asm("jmp _main");
void putchar(c) char c;
{
asm("mov ah, 0x0e");
asm("mov al, c");
asm("xor bx, bx");
asm("int 0x10");
}
void main()
{
asm("push cs");
asm("pop ds");
putchar('A');
for(;;);
}
當我用這個命令編譯它...
bcc -W -0 -c test.c -o test.obj
...它的工作。但是,當我試圖把它與...鏈接
ld86 -d isimsiz.obj -o kernel.bin
...它給了我這個錯誤:
undefined symbol: c
這究竟是爲什麼?如何在BCC聯線裝配下使用C變量?
如果你知道關於BCC的好教程,請留下鏈接。我找不到它的互聯網:(
由於事先在
PS:這裏是各自compiler BCC和linker LD86的手冊頁
另外我忘了提及。如果你知道有關BCC的好教程,請留下鏈接。我無法在互聯網上找到:(在此先感謝.. –
與'putchar'在同一行上聲明的'char c;'和無類型變量'c'是什麼?應該(除非我錯誤的,它使用的是非標準的語法)'void putchar(char c)' – enhzflep
@enhzlep BCC使用K&R語法,因此參數是正確的 –