当您使用内存覆盖前缀但所有操作数均为寄存器时会发生什么? [英] What happens when you use a memory override prefix but all the operands are registers?
问题描述
当您使用内存覆盖前缀但所有操作数都是寄存器时会发生什么?
What happens when you use a memory override prefix but all the operands are registers?
因此,假设您编写的代码为mov eax, ebx
或add eax, ebx
,默认值为32位,但使用了67h覆盖.
So, let's say you code mov eax, ebx
or add eax, ebx
and the default is 32-bit but you use a 67h override.
处理器如何处理这种情况?
How does the processor handle that situation?
推荐答案
《英特尔软件开发人员手册*》第2卷第2.1节详细介绍了每个指令前缀的行为.它说,将地址大小前缀(67h)与没有内存操作数的指令一起使用是保留的,并且可能导致不可预测的行为.
The Intel Software Developer's Manual*, volume 2, section 2.1, details the behavior of each instruction prefix. It says use of the address-size prefix (67h) with an instruction that doesn't have a memory operand is reserved and may cause unpredictable behavior.
操作数大小前缀(66h)可用于在16位和32位操作数大小之间切换,也可作为某些SSE2/SSE3/SSSE3/SSE4指令的强制前缀.保留其他使用权,并可能导致无法预料的行为.
The operand-size prefix (66h) may be used to switch between 16- and 32-bit operand sizes and also as a mandatory prefix with certain SSE2/SSE3/SSSE3/SSE4 instructions. Other use is reserved and may cause unpredictable behavior.
段覆盖前缀与任何分支指令一起保留.
The segment override prefixes are reserved with any branch instruction.
* https://software.intel.com/zh-cn/articles /intel-sdm
这篇关于当您使用内存覆盖前缀但所有操作数均为寄存器时会发生什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!