"推BYTE 0x80"和"警告:有符号字节值超出界限"在NASM

时间:2015-01-15 05:00:39

标签: assembly x86 nasm

当我尝试汇编以下代码时:

push BYTE 0x80

NASM显示以下警告:

warning: signed byte value exceeds bounds

这意味着什么?请注意,低于0x80的值不会导致警告。

1 个答案:

答案 0 :(得分:4)

PUSH imm8实际上并没有将一个字节压入堆栈。它推送至少一个字,它将从字节操作数进行符号扩展。因此,使用0x80的操作数,您实际上最终会推送0xff800xffffff800xffffffffffffff80,这很可能是NASM警告您的内容。

Intel's manual

中对此进行了描述
  

当前代码段描述符中的D标志确定默认操作数大小;有可能   被指令前缀(66HREX.W)覆盖。
  操作数大小(16,32或64位)确定堆栈指针递减的量(2,4或8)。
  如果源操作数是立即数并且其大小小于操作数大小,则符号扩展值为   推到了堆栈上。