在各种CPU上未对齐的MOVSD上会发生什么?

时间:2012-03-03 03:25:15

标签: assembly x86 x86-64 sse2

基本上问题是,如果我在各种CPU上执行不是8字节(甚至4字节)的MOVSD,会发生什么?它是否会对性能产生影响,是否会出现段错误等?

1 个答案:

答案 0 :(得分:4)

英特尔规范第1卷第4.1节

  

4.1.1单词,双字,四字和双四字的对齐

     

单词,双字和四字不需要在内存中对齐   在自然界限上。单词的自然界限,双字,   和四字是偶数地址,地址可以被整除   四分之一,地址可分别被8整除。   但是,要提高程序,数据结构的性能   (特别是堆栈)应该在自然边界上对齐   可能。原因是处理器需要两个   内存访问以进行未对齐的内存访问;对齐访问   只需要一次内存访问。单词或双字操作数   穿过4字节边界或跨越8字节的四字操作数   边界被认为是不对齐的,需要两个独立的内存总线   访问周期。

在“正常”情况下,未完成的movsd将需要2个周期才能完成。

如果打开对齐检查(在EFLAGS中),则CPU将发出AC信号。它主要是一种帮助您检测未对齐访问的方法。