基本上问题是,如果我在各种CPU上执行不是8字节(甚至4字节)的MOVSD,会发生什么?它是否会对性能产生影响,是否会出现段错误等?
答案 0 :(得分:4)
英特尔规范第1卷第4.1节
4.1.1单词,双字,四字和双四字的对齐
单词,双字和四字不需要在内存中对齐 在自然界限上。单词的自然界限,双字, 和四字是偶数地址,地址可以被整除 四分之一,地址可分别被8整除。 但是,要提高程序,数据结构的性能 (特别是堆栈)应该在自然边界上对齐 可能。原因是处理器需要两个 内存访问以进行未对齐的内存访问;对齐访问 只需要一次内存访问。单词或双字操作数 穿过4字节边界或跨越8字节的四字操作数 边界被认为是不对齐的,需要两个独立的内存总线 访问周期。
在“正常”情况下,未完成的movsd将需要2个周期才能完成。
如果打开对齐检查(在EFLAGS中),则CPU将发出AC信号。它主要是一种帮助您检测未对齐访问的方法。