【发布时间】:2021-10-23 05:00:55
【问题描述】:
玩了一下 Turbo Assembler 和 Turbo Debugger,我对操作码感到惊讶。更准确地说,我有一些组装好的二进制文件,Turbo Debugger 在其中反汇编这个词
29 C3
正确到sub bx, ax。但是,Turbo Assembler 将相同的指令 sub bx, ax 汇编为以下单词
2B D8
对此感到困惑,我发现this 参考说明从寄存器中减去寄存器确实可能以29 和2B 开头。真的是完全同一条指令可以用不同的操作码来表达吗?如果是这样,那是为什么?是因为历史原因和兼容性吗?参考说明了操作码的不同操作数类型,它们恰好与sub bx, ax 一致。这是为了以后通过自修改代码等修补不同操作数的能力吗?此外,Turbo Assembler 是否具有语法结构来选择一个操作码而不是另一个操作码?
注意: 我知道像 je 和 jz 这样的条件跳转具有相同的操作码,因为它们具有相同的标志相关行为,并且存在不同的助记符以反映不同的语义同样的操作,但前者让我感到困惑。
【问题讨论】:
标签: assembly x86 tasm opcode instruction-encoding