我正在使用两个不同的汇编程序组装相同的源代码。我希望得到两个相同的结果(模数内存偏移,NOP的精确值等)。然而,我突然遇到了一个最奇怪的问题:JZ有两种可能的编码:
74 cb
和
0F 84 cw/cd
在我的情况下,位移适合一个字节,一个汇编程序(我认为是GAS的一种)发出前者而另一个(MASM)发出后者。由于我通过匹配输出执行一些验证,因此会关闭验证。
我对GAS的选项几乎没有控制权,但我完全控制了MASM。问题 - 是否有一个选项,一个指令或一个特定的命令语法来强制一个编码而不是另一个?
答案 0 :(得分:0)
如果除了这一条指令之外的所有代码在组装时完全相同,这看起来像是MASM中的一个错误。这些说明解析为:
74: jz rel8
0F 84: jz rel16/32
因此,MASM不恰当地为该操作码使用了更多的空间。您可以通过在MASM中使用更明确的指令形式来解决这个问题,例如
jz byte my_label
但是,如果您的机器代码完全不同,则可能是MASM的正确的行为。确保jz rel16
的签名字/双字参数适合签名字节