免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2171 | 回复: 3
打印 上一主题 下一主题

[其他] 看了下MSDN的WIN64 ABI资料。。。 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-19 15:40 |只看该作者 |倒序浏览
在AMD64 SYS V ABI中
非易失通用寄存器仅仅有RBX、RSP、RBP、R12、R13、R14、R15这7个,额外考虑R10的话,总计8个
也就是说,被调用者仅仅需要8 x 8 = 64字节内存备份非易失通用寄存器,就能够使用全部16个通用寄存器
不备份通用寄存器的话,被调用者内至少也有8个通用寄存器(不含R10,含R10就是9个)可用
16个XMM寄存器都是可自由使用的易失寄存器
调用者毋须备份/恢复通用寄存器,只有被调用者需要考虑保留非易失寄存器内容的问题

WIN64则不然,非易失寄存器是如此之多,不进行备份/恢复的话,仅有下列寄存器可自由使用
通用寄存器5个:RAX、RCX、RDX、R8、R9
XMM寄存器4个:XMM0、XMM1、XMM2、XMM3
其它寄存器使用,有调用者保留的,也有被调用者保留的

还是UNIX自由啊

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
2 [报告]
发表于 2013-03-19 16:04 |只看该作者

そうか。了解了

论坛徽章:
0
3 [报告]
发表于 2013-03-19 22:14 |只看该作者

uinx/linux 粉总是想找出那么一点自以为是的优点,来满足虚荣心

寄存器的保存显然的双刃利
如果,callee 无需保存和恢复更多的寄存器,那么函数内满足可用要求的寄存器也会减少:

mov rbx, XXXX                   ; rbx 作为 context 内容

call Func                            ; 如果 Func 内修改了 rbx 寄存器,Func 也不保存/恢复的话

mov XXX, rbx                     ;  还不是不能满足 rbx 的可用

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2013-03-20 12:02 |只看该作者
城市小鸭 发表于 2013-03-19 22:14
uinx/linux 粉总是想找出那么一点自以为是的优点,来满足虚荣心

寄存器的保存显然的双刃利


易失寄存器越多,caller/callee的麻烦就越少,怎么会减少可用寄存器数量呢?
SYS V约定使用8个非易失寄存器我已经嫌多了,正在考虑裸奔方案呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP