【发布时间】:2015-06-04 17:59:00
【问题描述】:
测试在 64 位/x86 Ubuntu 12.04 上进行。与GCC 4.6.3.
所以基本上我正在处理一些 x64 汇编代码。我观察到RIP-relative addressing 要求绝对地址是 16 字节对齐的。
这是使用gdb进行调试时的示例:
0x40f38d <S_0x40F614+61> xorpd 0x84d3(%rip),%xmm0 # 0x417868 <S_0x417DE0>
此内存引用地址 0x417868 失败(分段错误),因为此地址仅 8 字节对齐。
0x40f38d <S_0x40F614+61> xorpd 0x8a4b(%rip),%xmm0 # 0x417de0 <S_0x417DE0>
这个内存引用可以工作,因为地址 0x417de0 是 16 字节对齐的。
这是我的观察,我没有找到任何官方材料讨论这个问题。谁能告诉我
- 这个 16 字节对齐要求是否普遍适用?
- 如果是这样,那么有任何官方文件/手册在谈论这个吗?
【问题讨论】:
-
是
xorpd指令要求内存操作数16字节对齐。