2012-03-27 45 views
1

注:我使用的是基於BSD的系統,所以如果我沒記錯的話,這意味着對於調用的子程序ARGS /功能推到不放在寄存器堆棧操作碼的AT&T語法後綴是什麼?

我一直在嘗試組裝,我想嘗試我的簡單內核退出程序:

.globl _start 

_start: 
    movl $0x20, %eax 
    pushl %eax 
    movl $0x1, %eax 
    subl $0x4, %esp 
    int $0x80 

64位程序集。

我記得讀到一個很大的區別是寄存器現在改名爲r而不是前綴的32位標準的前綴。

但是,什麼是64位的操作碼的新後綴,如果l已經意味着長32位?

出於好奇,爲什麼它的r前綴爲新註冊?

此外,如果有哪裏的進一步信息可以找到任何好的資源。或者教程,教程總是很有趣。

+0

調用約定是比32位應用程序64個應用程序的不同,所以您將使用寄存器,而不是堆棧。有關詳細信息,請參閱[此答案](http://stackoverflow.com/a/2538212/458390)。四字的64位後綴是「q」。 'r'前綴可能是因爲AMD首先創建了64位擴展,所以英特爾沒有機會添加其他意思是「擴展」的字母。 – ughoavgfhw 2012-03-27 01:17:35

回答

2

後綴是q四字r理應代表寄存器Here's在AT & T語法一介紹。

+0

任何想法爲什麼'l'不是dword的dword?還是僅僅是C編譯的GAS的殘餘?想想爲什麼C不是分別用'word'和'dword'而不是'short'和'long'呢? – Hawken 2012-03-27 01:19:31

+1

至於設計決策進入AT&T語法,我只能推測,它是緊密相連C.並作爲設計決策,進入C,我不能說:P – 2012-03-27 02:11:57

相關問題