我们将在下周对x86程序集进行一次考试,这段代码在语法检查中让我感到很困惑。
x86汇编中字节ptr,word ptr等意味着什么?
例如NEG byte ptr [si]
或NEG word ptr [si]
我知道这两个在x86汇编时是有效的语法,但为什么NEG byte ptr si
和NEG word ptr si
无效?
答案 0 :(得分:5)
[si]
是一个内存操作数,即位于ds:si
指定地址的内存中的一些数据。如果您只是说NEG [si]
汇编程序无法判断您是否想要取消内存中的字节或单词(或双字......)。
因此,您使用byte/word/dword ptr
来消除不同可能的指令编码之间的歧义。例如,对于NEG byte ptr [si]
,您告诉汇编器您希望它生成机器代码序列,该代码序列将取消位于ds:si
内存中的字节。
NEG si
直接在寄存器si
上运行,而不是在内存上运行。由于si
的大小已知(它是16位),因此您无需指定操作数的大小。