【发布时间】:2018-02-21 14:59:47
【问题描述】:
当您使用内存覆盖前缀但所有操作数都是寄存器时会发生什么?
因此,假设您编码 mov eax, ebx 或 add eax, ebx,默认为 32 位,但您使用 67h 覆盖。
处理器如何处理这种情况?
【问题讨论】:
-
66是操作数大小的前缀,所以它变成了mov ax,bx。您是说67地址大小前缀吗? -
是的,我编辑了原始问题。不,等等,我的意思是最初的问题。这就是重点,将内存前缀与没有内存操作数混合在一起。
-
66不是“内存”前缀。89 d8是mov eax, ebx。66 89 d8是mov ax, bx(在 32 或 64 位模式下,否则 66 前缀使操作数大小为 32 位,而不是默认的 16)。这就是您要问的意思,还是您真的想知道使mov eax, [ebx]变成mov eax, [bx]的67地址大小前缀。 (或在 64 位模式下,mov eax, [rbx]变为mov eax, [ebx]。) -
我的意思是 67 小时,我改变了它。谢谢。
标签: assembly memory x86 cpu-architecture overriding