2012-03-27 44 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

相关问题