2014-01-28 37 views
0

我有一個任務,涉及寫一個.S文件,並建立一個可執行文件,它返回0.我查了一下,它說它是彙編源代碼,但是當我寫它像彙編它沒有編譯。有人可以給我一個.S文件的例子或者一個關於它們的教程,它能指引我朝着正確的方向嗎?另外我必須創建一個makefile來創建可執行文件。如何編寫.S文件並將其製作爲可執行文件?

回答

0

你沒有指定一個指令集,所以希望我選擇了一個足夠模糊不能爲你做功課的人。

你會想知道調用約定或在這種情況下返回約定。一些體系結構的編譯器使用寄存器來返回一些使用堆棧的東西。

int zero (void) 
{ 
    return(0); 
} 

我會編這樣一個GCC PDP11交叉編譯器

pdp11-bsd2.11-gcc -O2 -c zero.c -o zero.o 
pdp11-bsd2.11-objdump -D zero.o 

,並得到

00000000 <_zero>: 
    0: 1166   mov r5, -(sp) 
    2: 1185   mov sp, r5 
    4: 0a00   clr r0 
    6: 1585   mov (sp)+, r5 
    8: 0087   rts pc 

所以看起來這個架構的返回值是R0。因此,我們可以縮短我們已經短節目是

.global _main 
_main: 
    clr r0 
    rts pc 

不幸的是我的PDP11交叉編譯器並不一定是建立在特定的操作系統之上做了一個交叉編譯器。

pdp11-bsd2.11-as zero.s -o zero.o 
pdp11-bsd2.11-gcc zero.o -o zero 
/opt/gnupdp11/lib/gcc/pdp11-bsd2.11/4.7.3/../../../../pdp11-bsd2.11/bin/ld: cannot find crt0.o: No such file or directory 
/opt/gnupdp11/lib/gcc/pdp11-bsd2.11/4.7.3/../../../../pdp11-bsd2.11/bin/ld: cannot find -lc 
collect2: error: ld returned 1 exit status 

這並不重要,因爲我沒有一個操作系統的pdp11來運行它。但是,在我可以運行的另一個平臺上執行相同類型的工作就可以了。

在make makefile之前,您需要知道要執行任務的命令行命令。也許可以創建一個腳本/批處理文件來執行完整和正確的命令,以便從頭到尾獲得完整的命令,然後可以像添加一行額外的文本和縮進一樣簡單,並且您有Makefile。請不要在這裏問這個問題,這裏已經有太多的信息了,在網上你應該沒有問題找到一個非常簡單的例子作爲參考。

+0

PDP-11 - 下沉的車道... ;-) – turboscrew

相關問題