assembly - 将 1 字节立即值添加到 2 字节内存位置

标签 assembly x86 nasm

来自this pageadd指令文档说如下:

enter image description here

请注意我突出显示的两条说明。

我在 NASM 中尝试了以下代码(符合第一个突出显示的指令):

add WORD [myvar], BYTE 0xA5

但我收到以下错误:

warning: signed byte value exceeds bounds

我做错了什么?

最佳答案

8 位立即数操作数(此处用 imm8 表示)被符号扩展为 16(或 32)位,以匹配其他操作数的大小(分别为 r/m16r/m32)。

因此,只能表示 -128 到 127 之间的值,这就是您从汇编器收到此警告的原因。

对于值 0xA5,您需要使用 WORD立即( imm16 ):

add WORD [myvar], WORD 0xA5

(尽管 WORD 在源操作数上是可选的,因为它是由常量的大小隐含的)。

关于assembly - 将 1 字节立即值添加到 2 字节内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090931/

相关文章:

在 Linux 上将 C 程序翻译成汇编 (x86_64)

assembly - 代码注入(inject)的 EXC_BAD_INSTRUCTION (armv7 asm)

compiler-construction - 给定一个指令地址,能否确定包含它的函数的起始地址?

c - 使用内联 asm 在 C 中强制消除尾调用

windows - 在什么情况下我需要为 x86-64 汇编函数设置 SEH 展开信息?

assembly - 英特尔x86-中断服务程序责任

c - 将 asm 嵌入到 C 编程中

c++ - 如何知道返回地址在栈上的位置c/c++

assembly - NASM:循环变成无限循环

assembly - 用汇编语言弹出 CD/光驱