【发布时间】:2018-09-03 17:45:51
【问题描述】:
在 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 字节指令没有 67?
【问题讨论】:
-
这些都没有意义。首先,指令以
fb结尾,85是下一条指令的一部分。其次,即使那样,66 67 8b 46 fb也会反汇编为mov ax, word [esi-5],这与您发布的并不完全相同。您在某处转录此内容是否有误? -
67 应该把地址变成 [esi-3] 没有它就会变成 [rsi-3] 所以某处有问题
-
@fuz 最后一个字节是多余的,我删除了它。无论如何,Hopper 中的
66 8B 56 FB计算结果为mov dx, word [rsi-3] -
@Kamil.S 不,这不正确。
66 8b 56 fb是mov dx, word [rsi-5]。您在某处转录此内容时出错了吗? -
@fuz 我不想承认,但我承认了,区别在于
word [rsi-5]与word [esi-5]
标签: assembly nasm x86-64 instruction-set yasm