在处理翻译以下代码段时,有人可以告诉我在那里的目的ptr
吗?
cmp byte ptr [eax], 0
ptr 是一个标签,它的值是:
(++>
我的理解cmp
是它将左侧的值与右侧的值进行比较。
涉及到第三个参数(ptr
),这是什么意思?是比较ptr
AND 中的内存地址值eax
吗0
?
如果有人可以帮我把它翻译成英文,那就太好了。谢谢。
在 Intel 汇编器语法中,没有明确提及操作数大小。当您说mov eax, 0
时,很明显需要一个 32 位操作数(因为eax
是 32 位宽),并且mov al, 0
意味着 8 位。
但是,当您取消引用内存位置时,无法推断操作数的大小,因此您必须分别对 8、16、32和64 位操作数使用 , 或 , 来byte ptr
明确指定它。word ptr
dword ptr
quad ptr
因此,您的指令将内存中的一个字节(8 位)eax
与 0 的值进行比较。
PTR 不是指令操作数,而是第一个操作数的选项。
eax
包含指向某个地址的指针。指令将字节值eax
与 0 相比较。
如同:
char *p = addr;
if(*p == 0)
...