6 x86 assembly nasm
当我尝试组装以下代码时:
push BYTE 0x80
NASM 显示以下警告:
warning: signed byte value exceeds bounds
这是什么意思?请注意,低于 0x80 的值不会导致警告。
Mic*_*ael 5
PUSH imm8实际上并没有将一个字节压入堆栈。它至少压入一个字,该字将从字节操作数进行符号扩展。因此,使用0x80您的操作数实际上最终会推送0xff80,0xffffff80或0xffffffffffffff80,这很可能是 NASM 警告您的内容。
PUSH imm8
0x80
0xff80
0xffffff80
0xffffffffffffff80
这在英特尔的手册中有描述:
当前代码段描述符中的 D 标志决定了默认操作数的大小;它可能会被指令前缀 (66H或REX.W)覆盖。 操作数大小(16、32 或 64 位)决定了堆栈指针的递减量(2、4 或 8)。 如果源操作数是立即数并且其大小小于操作数大小,则将符号扩展值压入堆栈。
66H
REX.W
归档时间:
11 年,4 月 前
查看次数:
1582 次
最近记录: