assembly - MASM 会在背后更改指令吗?

标签 assembly x86 x86-64 masm

在阅读 HLA faq 时,我对以下内容感到惊讶:

MASM has a nasty habit of changing instructions behind your back. HLA also seems to have this same problem.

然后我在网上搜索,但没有发现任何与此相关的信息。这是真的还是只是一个神话?

最佳答案

MASM 可以改变你的一切。例如,它可以修复你的条件跳转。也就是说,如果你写:

    add ax,bx
    jnz NotZero

    ...
NotZero:

如果 NotZero 超出了条件跳转的范围,MASM 可以将您的代码重写为:

    add ax,bx
    jz Zero
    jmp NotZero
Zero:
    ...
NotZero:

据我所知,有命令行开关可以防止这种情况发生。您还可以明确地说,jnz near NotZero 来防止它。如果您这样做并且目标超出了条件范围,您将收到错误。

我记得 MASM 还做过一些其他类似的事情,但已经过去很长时间了。我不记得那些具体的东西是什么。

关于assembly - MASM 会在背后更改指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7602339/

相关文章:

assembly - 如何通过AND运算得到SF = 1?

assembly - `uint64_t`有什么难处? (来自 `float`的转换程序集)

assembly - 是否可以暂时抑制单个 ret 指令的 Intel CET,或者以其他方式使用 retpolines?

assembly - 将 2 个 QWORD 从通用寄存器移动到 XMM 寄存器作为高/低

程序集:数组写入问题

c - fxch 的用法 - 汇编代码 - AT&T 语法

assembly - "DWORD can be used to declare a variable that contains the 32-bit offset of another variable"是什么意思?

linux - Nasm 中处理器寄存器的二进制表示

将各个程序集转换为机器代码

x86 - 不同的mmx,sse和avx版本是相互补充还是超集?