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

Peirre10个月前我的书籍330

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

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






相关文章

人一生必读的几本书之一。

这书是60-70年代出生的人喜欢看的书,认为是书中经典。有它的共同点。能引起人的共鸣。现在的书比以前的书多得多,现在的人不见得会认为这打包的书籍好在哪里,实际上这些书的确不错,关键是你要有心把它看完。...

和大家介绍一本书,【飞机原理构造】,爱好者可以下载阅读。

和大家介绍一本书,【飞机原理构造】,爱好者可以下载阅读。

飞机原理构造,这本书看了一点,正在抽空阅读,有同好的人吗?有兴趣的朋友,欢迎交流读后感,请留言。注明一下,这是新型高速飞机的原理书。如果飞机速度减慢的话,有些章节可以不计较的。加拿大那里有人在自己制造...

VBoxManage 命令行使用(转)

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

来点达芬奇手稿,看看当时发生了什么。【读书记录】

来点达芬奇手稿,看看当时发生了什么。【读书记录】

达芬奇笔记列奥纳多.达.芬奇,各方面集成的天才大师。这些是他的原创手稿。在这里,一起探索大师头脑深处的秘密。都是以前的未解之迷。这辆车靠近火绳钩枪尾部的部分被设定为a,当火绳钩枪的尾部向后移动时,这部...

我的私人字库网络版

我的私人字库网络版

用FontCreator 9.0和PhotoShop CS6软件制作了一个私人用的字库。可以显示绝大部分简体。是我的手写体,有些没有优化。娱乐和设计使用。链接: https://pan.baidu.c...

重翻旧书,温故MFC模块VC windows 编程。

重翻旧书,温故MFC模块VC windows 编程。

MFC模组是微软提供的源码级别模块,开发应用程序得心上手,开发速度很快。很多人初学程序语言,不知道如何上手编第一个应用。也许应用太容易,看不上。太难自己又完不成。实际上,程序只是解决问题的一个工具,也...