当前位置:首页 > 我的书籍 > 正文内容

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

Peirre3年前 (2023-10-16)我的书籍615

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

那调用约定有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






分享给朋友:

相关文章

CPU 汇编指令中和标志位有影响的指令图片。

CPU 汇编指令中和标志位有影响的指令图片。

CPU的汇编指令和CPU的标志位影响关系图,自用备查。SSE3部分FPU部分SSE4部分SSE2部分SSE部分浮点异常表常规指令指令符后缀与标志位影响关系...

VBoxManage 命令行使用(转)

原文地址:http://cnjun939.blog.163.com/blog/static/78144538201251474311135/由于最近需研究virtualbox,看好看到上面的网址有,只...

nRF无线SOC单片机原理与高级应用一书读后感。

nRF无线SOC单片机原理与高级应用一书读后感。

这两天买了一本书内容是介绍nRF单片机的。说实话这本书出来好几年了。我的单片机也买了两年。以前已经看完英文资料,因为英文的理解会不太准确,读得慢,每次阅读次数不多。所以还是买了这本书。这本书读起来不吃...

没什么新的了,讨论一下TMP2.0技术。

没什么新的了,讨论一下TMP2.0技术。

这两年突然出了一个TMP2.0技术。说起来,TMP2.0的硬件是一小块卡。我没深入了解,只作分析。TMP2.0技术,通过硬件连接电脑I/O总线隐藏它的硬件地址,然后通过系统加密一些重要数据。这一些重要...

一个教材,学VC,编游戏程序。

一个教材,学VC,编游戏程序。

这个教材写得不错,很深入浅出。程序例子是2.5界面的游戏,仿微软件的《帝国时代》游戏,是自己的代码。但曾经看过商业代码,是类似和相互学习,教学是个短浅的例子。作者是系统分析师兼计算机杂志编辑。这个游戏...

早期的图形模式和显卡。

早期的图形模式和显卡。

以前的显示器是CRT也就是玻璃显像管的显示器,现在是液晶显示器。大有不同。以前的单色显示器有黑白单显,绿色单显,黑白单显好用一点,所以绿色的单显很少见。黑白的显示色彩用灰度,分辨率是720X348是电...