21,458
社区成员
发帖
与我相关
我的任务
分享
MOV AX, 0xff
PUSH AX
MOV AX, 0xf0
PUSH AX
MOV SI, SP
MOV AX, 0xff
SUB AX, [SI+2]
JZ error
JMP hello
楼主可以试一下这段代码,保护模式下写的,因此SI+2而不是SI+4。运行结果会JMP error,说明SP指向的是栈顶(下一个将要出栈的数据的地址)。猜测函数中的[ESP+4]是参数,而[ESP]是这个函数的返回地址,所以经常用到+4却不是ESP。因为是32位模式,ESP-4才是下一个可用的空位。
另外
PUSH EAX = SUB ESP, 4
MOV [ESP], EAX
POP EAX = MOV EAX, [ESP]
ADD ESP, 4