RIP相对寻址是否需要16字节对齐?

时间:2015-06-04 17:59:01

标签: assembly x86 x86-64

测试是在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字节对齐的。

这是我的观察,我没有找到任何有关此问题的官方材料。有谁能告诉我

  1. 这个16字节对齐要求是否普遍正确?
  2. 如果是的话,是否有任何官方文件/手册在讨论这个问题?

1 个答案:

答案 0 :(得分:4)

这是xorpd指令。它导致类型4的异常和异常,当您指定没有VEX前缀的未对齐内存位置时会发生这种情况。 (所以vxorpd不会因未对齐而出错。)

Intel Manuals

然而,它不是唯一的,大约有106条指令导致同样的事情。