NASM在组装时将JNZ改为JNE?为什么?

ST-*_*ser 4 x86 assembly nasm disassembly

我有一段使用JNZ的代码.当我汇编并链接二进制文件时,我看到我的JNZ替换为JNE.据我所知,两者基本相同.但是为什么NA​​SM会改变它呢?

此外,是否有任何配置选项可用于阻止此更改在组装时发生?

And*_*ter 9

据我所知,两者基本相同

JNE并且JNZ具有相同的操作码(0x75用于短跳转和0x0f 0x85近跳转),因此汇编器将为它们创建相同的机器代码.

在拆卸时,反汇编器不再知道在源中使用了哪一个,并且必须采用其中一个.

此外,是否有任何配置选项可用于阻止此更改在组装时发生?

不,因为它不是真正的"替代品" - JNE而且JNZ只是针对相同操作码的不同助记符.

  • 您可以使用它们来使您的代码更易读和更容易理解 - 使用`JNE`后跟`CMP`指令来明确表示您正在检查**相等**,如果您只是想要使用`JNZ`检查零标志(例如在"SUB"指令之后检查结果是否为零) (3认同)