返回信息流压栈指令PUSH AX后,SP的值是先减一,将AH压入堆栈,然后再减一,将AL压入堆栈呢,还是SP直接减二,先压AL,再压AH呢?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #22331同步于 2007/11/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
不好意思,再问一个
jlord
2007/11/17镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
Operation
IF StackAddrSize = 64
THEN
IF OperandSize = 64
THEN
RSP ← (RSP -8);
IF (SRC is FS or GS)
THEN
TEMP = ZeroExtend64(SRC);
ELSE IF (SRC is IMMEDIATE)
TEMP = SignExtend64(SRC); FI;
ELSE
TEMP = SRC;
FI
RSP ←TEMP; (* Push quadword *)
ELSE (* OperandSize = 16; 66H used *)
RSP ← (RSP -2);
RSP ←SRC; (* Push word *)
FI;
ELSE IF StackAddrSize = 32
THEN
IF OperandSize = 32
THEN
ESP ←(ESP - 4);
IF (SRC is FS or GS)
THEN
TEMP = ZeroExtend32(SRC);
ELSE IF (SRC is IMMEDIATE)
TEMP = SignExtend32(SRC); FI;
ELSE
TEMP = SRC;
FI;
SS:ESP ← TEMP; (* Push doubleword *)
ELSE (* OperandSize = 16*)
ESP ←(ESP - 2);
SS:ESP ←SRC; (* Push word *)
FI;
ELSE StackAddrSize = 16
IF OperandSize = 16
THEN
SP ←(SP -2);
SS:SP ←SRC; (* Push word *)
ELSE (* OperandSize = 32 *)
SP ← (SP -4);
SS:SP ←SRC; (* Push doubleword *)
FI;
FI;
FI;
【 在 rebirthatsix 的大作中提到: 】
: 你可以去看intel 的手册,看看它的push16位寄存器指令是怎么执行的
PUSH AX之后,是SP-1,AH入栈,然后SP再-1,AL入栈
比如说,如果AX=2010H,SP=0050H
PUSH AX之后
[0048H]=10H
[0049H]=20H