汇编代码中的堆栈指针问题

2021-07-02 12:30发布


有人能告诉我堆栈指针在下面的代码中是如何工作的吗?因为我是这个领域的新手:


CSEG AT 0H
MOV 0x40, #5MOV 0X41, #6PUSH 0X41
PUSH 0X40
POP 0X41
POP 0X40
END


4条回答
王兵兵
2021-07-02 14:30

堆栈通常向下递进,因此如果堆栈为空,并从地址0x1000开始。堆栈指针将指向0x1000。因此,使用题主的示例,您可以从0x41位置(包含值6)获得想要保存在堆栈上的值。

从位置0x41将数据6的值PUSH到堆栈上。

所以位置0x1000现在存放数字6(堆栈指针被减少,所以现在指向位置0xFFF)

现在将数字5的值从0x40位置PUSH到堆栈上。

因此,位置0xFFF现在存放数字5(堆栈指针被减少,所以现在指向位置0xFFE)


现在你POP堆栈,堆栈指针将递增,以指向堆栈上最后使用的位置,从而指向0xFFF。

这包含值5,所以将数字5放在0x41位置。

现在你又弹出了堆栈,堆栈指针将递增,以指向堆栈上最后使用的位置,从而指向0x1000。

这包含值6,所以您将数字6放在0x40位置。

需要注意的是最先一个被PUSH堆栈上的最后从堆栈中弹出。


一周热门 更多>