注:我使用的是基于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
前缀为新注册?
此外,如果有哪里的进一步信息可以找到任何好的资源。或者教程,教程总是很有趣。
调用约定是比32位应用程序64个应用程序的不同,所以您将使用寄存器,而不是堆栈。有关详细信息,请参阅[此答案](http://stackoverflow.com/a/2538212/458390)。四字的64位后缀是“q”。 'r'前缀可能是因为AMD首先创建了64位扩展,所以英特尔没有机会添加其他意思是“扩展”的字母。 – ughoavgfhw 2012-03-27 01:17:35