如何比较 masm x86 中的 esp?

How to compare esp in masm x86?

我在 MASM x86 中有一个没有序言的函数。我想比较传递给函数的堆栈上的参数。

.MODEL flat
extern x:dword

foo proc
cmp esp+4, x
...
foo endp

我也试过 DWORD PTR [esp+4],x,但还是不行。我不想搞乱从堆栈弹出或其他任何东西,因为这只是一个转发功能。我的问题基本上是为什么我不能直接将堆栈上的 arg 与全局变量进行比较?如果不可能,请告诉我另一种解决方法。

x86 不支持直接比较两个内存位置。您需要先将其中一个移动到寄存器中(最好是eax),然后使用寄存器进行比较:

MOV EAX, x
CMP DWORD PTR [ESP + 4], EAX