mat*_*ix2 3 memory x86 assembly overriding cpu-architecture
使用内存覆盖前缀但所有操作数都是寄存器时会发生什么?
所以,让我们说你的代码mov eax, ebx或add eax, ebx默认是32位,但你使用67h覆盖.
处理器如何处理这种情况?
英特尔软件开发人员手册*,第2卷,第2.1节详细介绍了每个指令前缀的行为.它表示使用地址大小前缀(67h)和没有内存操作数的指令是保留的,可能会导致不可预测的行为.
操作数大小前缀(66h)可用于在16位和32位操作数大小之间切换,也可用作某些SSE2/SSE3/SSSE3/SSE4指令的强制前缀.其他用途是保留的,可能会导致不可预测的行为.
段覆盖前缀保留在任何分支指令中.
*https://software.intel.com/en-us/articles/intel-sdm