如何在x86上使用AT&T语法添加立即字节到长寄存器?
-
29-10-2019 - |
题
根据我对英特尔手册的了解,应该可以编写诸如add $0x7f, %ebx
之类的指令,并且应将其编码为83 /0 ib
,总共三个字节。
但是,当我这样做时(无论我使用add
,addb
还是addl
),它总是将立即值“提升”为32位值,并编码为81 /0 id
并占用六个字节。adc
,sub
等也存在相同的问题。请注意,我将AT&T语法与GNU as
一起使用。
我一直在寻找一种解决方案,但是没有找到它。有人可以建议吗?
解决方案
令人惊讶的是,我没有这样的问题。
我采用了gcc
(DJGPP)生成的汇编代码:
通用标签
并使用as
对其进行编译,这就是我在a.out中看到的内容:
通用标签
C程序是: 通用标签
您确定您的直接操作数可以表示为8位带符号整数吗?如果它在-128至+127范围之外,则汇编程序将不得不使用更长的编码。
不隶属于 StackOverflow