最近刚开始看atomic.LoadUint64的源码,在下面的asm代码中得到了一个未知变量“ptr”:TEXT runtime∕internal∕atomic·Load64(SB), NOSPLIT, $0-12 MOVL ptr+0(FP), AX TESTL $7, AX JZ 2(PC) MOVL 0, AX // crash with nil ptr deref MOVQ (AX), M0 MOVQ M0, ret+4(FP) EMMS RET我找不到这个变量的声明,也找不到任何关于这个变量的文档,谁能告诉我一下?
1 回答
HUH函数
TA贡献1836条经验 获得超4个赞
Go 汇编程序快速指南
符号
伪寄存器
FP
是用于引用函数参数的虚拟帧指针。编译器维护一个虚拟帧指针并将堆栈上的参数引用为该伪寄存器的偏移量。因此0(FP)
是函数的第一个参数,8(FP)
是第二个(在 64 位机器上),依此类推。但是,当以这种方式引用函数参数时,有必要在开头放置一个名称,如first_arg+0(FP)
andsecond_arg+8(FP)
。(偏移量的含义——从帧指针开始的偏移量——不同于它在 中的使用SB
,它是从符号开始的偏移量。)汇编器强制执行此约定,拒绝普通0(FP)
和8(FP)
. 实际名称在语义上无关紧要,但应该用于记录参数名称。值得强调的是,它FP
始终是伪寄存器,而不是硬件寄存器,即使在具有硬件帧指针的体系结构上也是如此。
ptr
, in ptr+0(FP)
, 是函数第一个参数的名称。该参数可能是一个指针。
- 1 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消