Assembly 具有3个参数的汇编cmp指令

Assembly 具有3个参数的汇编cmp指令,assembly,Assembly,我正在阅读一些汇编代码,试图弄清楚它在做什么(这是一个挑战,所以没有恶意)。 单行上有以下说明: cmp d,[eax],0dadada 我花了很长时间在谷歌上,无法计算出这一个,我知道你不能比较3个值,所以我知道0DA。。。。部分是我所缺少的。我发现了一些我再也找不到的文章,建议这与填充空白内存有关,但不确定是否会得到任何帮助。您必须指定正在使用的汇编程序语法;x86(很可能是这样)甚至其他机型都有很多不同的种类 由于不知道具体的语法,并且同意CMP指令没有3个操作数,我猜“d”表示“dwor

我正在阅读一些汇编代码,试图弄清楚它在做什么(这是一个挑战,所以没有恶意)。 单行上有以下说明:

cmp d,[eax],0dadada


我花了很长时间在谷歌上,无法计算出这一个,我知道你不能比较3个值,所以我知道0DA。。。。部分是我所缺少的。我发现了一些我再也找不到的文章,建议这与填充空白内存有关,但不确定是否会得到任何帮助。

您必须指定正在使用的汇编程序语法;x86(很可能是这样)甚至其他机型都有很多不同的种类

由于不知道具体的语法,并且同意CMP指令没有3个操作数,我猜“d”表示“dword[32位]”。所以我认为可能的解释是

   "compare  dword operand indirect through eax to hex literal 0DADADADA"

这是一条有效的x86指令。

也许在更高的地方有一个宏将
d
定义为
DWORD
?我恐怕无法回答任何问题,因为我不知道。我们刚刚收到了一段代码(10行),我们只是试着弄清楚这部分在做什么。代码中没有定义什么是“d”。由谁提供?这是一件事,要求你理解某个事物的定义是明确的,你正在学习这样一个定义的细节。如果有人递给你东西而不清楚背后的定义,那完全是另一回事。我想问这个问题的代理人是教授吧?要么他在现实世界中给你上了一课(当你没有得到足够的信息时,你的问题是得到足够的信息),要么他是一个非常糟糕的老师。如果不是的话,他是个无能的老板,欢迎来到现实世界。我会直截了当地问他哪种汇编符号。是的,我想我会让那个人给我更多的信息。再次谢谢。这很可疑
cmp
正好有2个输入操作数,它隐式地将状态标志设置为唯一的输出。另外,
0dadada
看起来也很糟糕:前导零应该将其标识为八进制数,而数字显然是十六进制的;它是否是八进制取决于汇编程序的定义,这显然是一个十六进制常量。@IraBaxter:嗯,通常十六进制文字的前缀是
0x…
,而八进制文字的前导是零。此问题可能与使用不同约定的汇编器有关,但未提及确切的汇编器。@EOF:“未提及确切的汇编器”。这就是重点。@IraBaxter:……在这种情况下,我将假设正常的约定,并指出这很奇怪。