movzbw 和 movzbl 的操作码都是 OF B6 。我不明白如何通过观察 ModR/M 字节来区分它们。从 Intel 80386 Programmer's Reference Manual (1986) :



处理器如何区分和movzbw和movzbl?

最佳答案

看起来它使用前缀字节:

66 0f b6 c0             movzx  ax,al
0f b6 c0                movzx  eax,al
0f b7 c0                movzx  eax,ax

编辑:注意,在 64 位模式下,上面是相同的,但还有另一个前缀:
48 0f b6 c0             movzx  rax,al
48 0f b7 c0             movzx  rax,ax

请注意,没有 movzx rax, eax 指令。

(我在这方面完全是新手,所以我无法确切解释原因,我只是将代码扔给编译器,看看它是否被接受)。

关于assembly - 80386 - cpu 如何在 movzbw 和 movzbl 之间进行选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33061162/

10-12 13:48