我们谈谈以前高级编程语言的约定和64位调用约定。

Peirre8个月前我的书籍294

对了,为什么这里一直没有说调用约定这个问题,因为我这个网站是默认别人会一种编程语言的。

那调用约定有call,stdcall,pascal,falt,这些约定。

这些约定是有什么意义呢?为什么要这样子约定。

call。这是c语言的约定,也就是一个子函数的参数入口和返回值的用法。

pascal 这是以前教学编程语言 pascal的约定。

falt 这是采用浮点数的约定。

stdcal 这个约定算一个标准,很多语言采用中间的一个约定方法。

那现在的 x64位约定呢,有两种。

一种是 System V AMD64 ABI调用约定。

还有一种是 Microsoft x64约定

这些调用约定让你能和其它的c语言类交叉于asm语言函数,正确的调用函数入口内的参数。

x64位函数参数的参数调用约定:

第一个参数放入rdi

第二个参数放入rsi

第三个参数放入rdx

第四个参数放入rcx

第五个参数放入r8

第六个参数放入r9

那六个以上的参数,我们以栈的相反的顺序传递。

压入第十个参数

压入第九个参数

压入第八个参数

压入第七个参数

那压栈的参数用栈指针表示rsp-8

压入第十个参数时rsp减少8个字节 【栈顶】

压入第九个参数时rsp减少8个字节。

.

.

.

.

压入第七个参数时rsp减少8个字节。

那函数开头有个rbp寄存器,这是堆的寄存器指针此时联动rsp-8放rbp值,用于恢复指针。


那浮点参数的传递表示:

第一个参数放入xmm0

第二个参数放入xmm1

.

.

.

.

第八个参数放入xmm7

函数返回寄存器xmm0的浮点返回结果。

还返回一个rax是一个整数或地址。

关于以上的参考,我是怎么知道的,有一本刚出的书《x64汇编语言:从新手到AVX专家》

还有个参考链接:

https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf

可以看到相关内容。

a04935830e949bb0e50ddb63ebfab095.jpg






相关文章

B站粉丝实时查看器B-BOX,粉丝牌[书籍文摘]

B站粉丝实时查看器B-BOX,粉丝牌[书籍文摘]

今天去图书馆看杂志,发现《无线电》杂志内容今年大变样。很有趣还很生动。和现在的一些新东西共同进步。这里讲到的是B站粉丝实时查看器 B-BOX,原文在《无线电》杂志上。【包看包会系列】bilibili粉...

原本,纯英文资料,开4899端口的,BIOS级的。

原本,纯英文资料,开4899端口的,BIOS级的。

资料AMI_Debug_Remote_Users_Guide.pdf是不是原本,是不是原本!!!昨天http://www.ami.com/ 资料还是可以共享的,今天限制下载http://ww...

一本外国食谱,一半看不懂,献了。

一本外国食谱,一半看不懂,献了。

书籍参考,写了工作方式,餐具选择,食材的部位选择。参考资料:www.godmain.cn/John.Wiley.Professional.Cooking.pdf 不知道是否有0day漏洞,注意一下。...

找了好久的BIOS和DOS,向量表和数据表。

找了好久的BIOS和DOS,向量表和数据表。

简单说明一下,中断向量在16位地址的内存最初的000:3FF 数据内,4个字节为一个数组地址。编号为0-FFh,分硬中断和软件中断,分BIOS中断和DOS中断,分系统中断和用户中断。实际上书本上有这些...

appwin 模拟器软件内含调试器助记符说明。

appwin 模拟器软件内含调试器助记符说明。

.    光标地址进入反汇编窗口 =  设置PC寄存器地址到当前指令 G  运行在正常速度 [PC寄存器 = 地址] 使用: 地址 | 标号 [保留,长度] 使用: 地址 | 标号 [...

以前老舍的《骆驼祥子》为什么这么火爆,简单的个人经济分析。

以前老舍的《骆驼祥子》为什么这么火爆,简单的个人经济分析。

写这本书的人是老舍,字“庆春”,含冤沉入北京太平湖,希望坏人不要冤曲我,我以前很好,现在不算什么好。有点自私,但是私不过别人。还有,我是中国人,不要私立我的国籍。我在中国有投资,花人民币。看我的书评和...