为什么 nasm 和 yasm 为 mov r16, word [r64 - 3] 指令产生 67 个操作码?

Why nasm and yasm yield 67 opcode for mov r16, word [r64 - 3] instruction?

x86-64 程序集中,我有以下说明

mov        dx, word [esi-5]

Nasm 2.13.03 生成:

66 67 8B 56 FB 

yasm 1.3.0 生成:

67 66 8B 56 FB 

66 67 操作码是修饰符,因此 8B 56 FB 本身就是:

 mov        edx, dword [rsi-5]

我注意到:

66 8B 56 FB 

也计算为:

mov        dx, word [rsi-5]

我有两个问题:
1) 为什么 nasm & yasm 发出这个 67 操作码字节填充? (67 本身不足以将 edx 减少到 dx,它需要包括 66
2) 有没有办法在 nasm / yasm 中发出更短的 4 字节指令 without 67

题目做出假设66 8B 56 FB

mov        dx, word [rsi-5] 

相当于

`66 67 8B 56 FB` or `67 66 8B 56 FB` 

mov        dx, word [esi-5] 

66edx 减少为 dx
67[rsi-5] 减少到 [esi-5]