使用内存覆盖前缀但所有操作数都是寄存器时会发生什么?

时间:2017-09-13 03:28:44

标签: assembly memory x86 cpu-architecture overrides

当您使用内存覆盖前缀但所有操作数都是寄存器时会发生什么?

所以,假设您编写代码mov eax, ebxadd eax, ebx,默认值为32位,但使用67h覆盖。

处理器如何处理这种情况?

1 个答案:

答案 0 :(得分:5)

英特尔软件开发人员手册*,第2卷,第2.1节详细介绍了每个指令前缀的行为。它表示使用地址大小前缀(67h)和没有内存操作数的指令是保留的,可能会导致不可预测的行为。

操作数大小前缀(66h)可用于在16位和32位操作数大小之间切换,也可用作某些SSE2 / SSE3 / SSSE3 / SSE4指令的强制前缀。其他用途是保留的,可能会导致不可预测的行为。

段覆盖前缀保留在任何分支指令中。

* https://software.intel.com/en-us/articles/intel-sdm