能力值:
( LV13,RANK:530 )
|
-
-
2 楼
适合于 64 位的返回值是通过 RAX 返回的(包括 __m64 类型),但 __m128、__m128i、__m128d、浮点值和双精度值除外,它们是在 XMM0 中返回的。如果返回值不适合于 64 位,则由调用方为返回值分配指针并将其作为第一个参数传递。然后,后续参数将向右侧移动一个参数的位置。RAX 中的被调用方必须返回相同的指针。要返回的用户定义类型的长度必须为 1、2、4、8、16、32 或 64 位。
Visual C++
寄存器使用
请参见
全部折叠 全部展开 语言筛选器: 全部 语言筛选器: 多个 语言筛选器: Visual Basic 语言筛选器: C# 语言筛选器: C++ 语言筛选器: J# 语言筛选器: JScript
Visual Basic(声明)
Visual Basic (用法)
C#
C++
J#
JScript
x64 结构提供了 16 个通用寄存器(以后称为整数寄存器),以及 16 个可供浮点使用的 XMM 寄存器。易失寄存器是由调用方假想的临时寄存器,并要在调用过程中销毁。非易失寄存器需要在整个函数调用过程中保留其值,并且一旦使用,则必须由被调用方保存。
下表说明了每种寄存器在整个函数调用过程中的使用方法:
Register
状态
请使用
RAX
易失的
返回值寄存器
RCX
易失的
第一个整型参数
RDX
易失的
第二个整型参数
R8
易失的
第三个整型参数
R9
易失的
第四个整型参数
R10:R11
易失的
必须根据需要由调用方保留;在 syscall/sysret 指令中使用
R12:R15
非易失的
必须由被调用方保留
RDI
非易失的
必须由被调用方保留
RSI
非易失的
必须由被调用方保留
RBX
非易失的
必须由被调用方保留
RBP
非易失的
可用作帧指针;必须由被调用方保留
RSP
非易失的
堆栈指针
XMM0
易失的
第一个 FP 参数
XMM1
易失的
第二个 FP 参数
XMM2
易失的
第三个 FP 参数
XMM3
易失的
第四个 FP 参数
XMM4:XMM5
易失的
必须根据需要由调用方保留
XMM6:XMM15
非易失的
必须根据需要由被调用方保留。
请参见
参考
x64 软件约定
要提出有关“帮助”或本产品其他功能的建议或错误报告,请转到 反馈站点.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢foxabu。对象指针保存在哪个寄存器,以供成员函数访问的呢?
|
能力值:
( LV13,RANK:530 )
|
-
-
4 楼
不好意思 我这里也没有安装编译器 微软的文档上面也没有说 但是按照规则应该是RCX 这个我也不确定 你可以查查资料。
|
|
|