根据我对英特尔手册的了解,应该可以编写诸如add $0x7f, %ebx之类的指令,并且应将其编码为83 /0 ib,总共三个字节。

但是,当我这样做时(无论我使用addaddb还是addl),它总是将立即值“提升”为32位值,并编码为81 /0 id并占用六个字节。adcsub等也存在相同的问题。请注意,我将AT&T语法与GNU as一起使用。

我一直在寻找一种解决方案,但是没有找到它。有人可以建议吗?

有帮助吗?

解决方案

令人惊讶的是,我没有这样的问题。

我采用了gcc(DJGPP)生成的汇编代码: 通用标签

并使用as对其进行编译,这就是我在a.out中看到的内容: 通用标签

C程序是: 通用标签

您确定您的直接操作数可以表示为8位带符号整数吗?如果它在-128至+127范围之外,则汇编程序将不得不使用更长的编码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top