編譯環境 gcc 編譯16位程式

2021-07-08 20:20:37 字數 1144 閱讀 4541

test.c檔案如下:

short add(short first, short second);

/* * 如果用完全用c語言寫16位**,則入口函式必須寫成第乙個函式。

* * 雖然使用了freestanding environment,但gcc仍然對main函式額外做了特殊的處理。

* 具體是新增了下面三條指令:

* leal 4(%esp), %ecx

* and 0xfffffff0, %esp

* pushl (%ecx-4)

* 其在main函式最開始初始化了棧頂的位置,故在此需要使用另外的入口函式。

* 在鏈結過程中,需要在在ld命令中需要使用的-e引數設定該函式為入口函式。

*/void mymain(void)

short add(short first, short second)

makefile檔案:

test.img:test

dd if=/dev/zero of=test.img bs=1440k count=1

dd if=test of=test.img bs=512 count=1 conv=notrunc

test:test.o

ld test.o --oformat binary -m elf_i386 -e mymain -o test

test.o:test.s

as test.s --32 -c -o test.o

test.s:test.c

gcc test.c -m16 -ffreestanding -std=c11 -s -o test.s

bochsrc檔案:

memory:guest=64, host=64

ata0:enabled=1, ioaddr1=0x1f0, ioaddr2=3f0, irq=14

ata0-master:type=disk, path=test.img

boot:disk

需要注意的是:

在用bochs執行之前,必須手動將test.img檔案中第0x1fe位元組和0x1ff兩個位元組分別改為0x55和0xaa,否則無法成功引導。

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可...

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可...

GCC編譯程式

gcc gnu compiler collection 是linux下最主要的一種編譯工具。gcc編譯格式 gcc 選項 源檔名 選項 目標檔名 採用預設得方式編譯原始檔,系統會生成a.out可執行檔案 採用顯式編譯成目標檔案,在編譯成可執行檔案 gcc c hello.c 生成hello.o gc...