来自this page的add
指令文档说如下:
请注意我突出显示的两条说明。
我在 NASM 中尝试了以下代码(符合第一个突出显示的指令):
add WORD [myvar], BYTE 0xA5
但我收到以下错误:
warning: signed byte value exceeds bounds
我做错了什么?
最佳答案
8 位立即数操作数(此处用 imm8
表示)被符号扩展为 16(或 32)位,以匹配其他操作数的大小(分别为 r/m16
或 r/m32
)。
因此,只能表示 -128 到 127 之间的值,这就是您从汇编器收到此警告的原因。
对于值 0xA5,您需要使用 WORD
立即( imm16
):
add WORD [myvar], WORD 0xA5
(尽管 WORD
在源操作数上是可选的,因为它是由常量的大小隐含的)。
关于assembly - 将 1 字节立即值添加到 2 字节内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090931/