0

在处理翻译以下代码段时,有人可以告诉我在那里的目的ptr吗?

cmp byte ptr [eax], 0

ptr 是一个标签,它的值是:

(++>

我的理解cmp是它将左侧的值与右侧的值进行比较。

涉及到第三个参数(ptr),这是什么意思?是比较ptrAND 中的内存地址值eax0

如果有人可以帮我把它翻译成英文,那就太好了。谢谢。

4

3 回答 3

4

在 Intel 汇编器语法中,没有明确提及操作数大小。当您说mov eax, 0时,很明显需要一个 32 位操作数(因为eax是 32 位宽),并且mov al, 0意味着 8 位。

但是,当您取消引用内存位置时,无法推断操作数的大小,因此您必须分别对 8、16、32和64 位操作数使用 , 或 , 来byte ptr明确指定它。word ptrdword ptrquad ptr

因此,您的指令将内存中的一个字节(8 位)eax与 0 的值进行比较。

于 2013-10-30T19:05:41.197 回答
0

PTR 不是指令操作数,而是第一个操作数的选项。

于 2013-10-30T20:11:03.340 回答
0

eax包含指向某个地址的指针。指令将字节值eax与 0 相比较。

如同:

char *p = addr;
if(*p == 0)
   ...
于 2013-10-30T19:04:35.817 回答