当我尝试汇编以下代码时:
push BYTE 0x80
NASM显示以下警告:
warning: signed byte value exceeds bounds
这意味着什么?请注意,低于0x80的值不会导致警告。
答案 0 :(得分:4)
PUSH imm8
实际上并没有将一个字节压入堆栈。它推送至少一个字,它将从字节操作数进行符号扩展。因此,使用0x80
的操作数,您实际上最终会推送0xff80
,0xffffff80
或0xffffffffffffff80
,这很可能是NASM警告您的内容。
当前代码段描述符中的D标志确定默认操作数大小;有可能 被指令前缀(
66H
或REX.W
)覆盖。
操作数大小(16,32或64位)确定堆栈指针递减的量(2,4或8)。
如果源操作数是立即数并且其大小小于操作数大小,则符号扩展值为 推到了堆栈上。