2021-07-02 12:30发布
有人能告诉我堆栈指针在下面的代码中是如何工作的吗?因为我是这个领域的新手:
CSEG AT 0H MOV 0x40, #5MOV 0X41, #6PUSH 0X41 PUSH 0X40 POP 0X41 POP 0X40 END
你想要知道什么。内存位置0x40存放的数字5内存位置0x41存放的数字6将0x41位置的数据PUSH堆栈。将0x40位置的数据PUSH堆栈将栈顶的数据弹出到0x41位置将栈顶的数据弹出到从0x40位置位置0x40存放的数字6位置0x41存放的数字5基本上是交换这两个位置的数据的值的作用。
因为堆栈的位置随着数据不断变化。如果你PUSH三个值,比如12,13和14,那么14就会排在最上面。POP一个值后13人将位于栈顶。
堆栈通常向下递进,因此如果堆栈为空,并从地址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堆栈上的最后从堆栈中弹出。
它之所以被称为堆栈,因为它就像一堆纸或盒子。在处理器中,它通常以高地址递减开始,但是只要把它想象成一堆纸,你就可以在纸上写一个数字,然后把它叠起来。当你打开它的时候,你只会得到最上面的一张纸。这对你的理解有帮助吗?
最多设置5个标签!
因为堆栈的位置随着数据不断变化。如果你PUSH三个值,比如12,13和14,那么14就会排在最上面。POP一个值后13人将位于栈顶。
堆栈通常向下递进,因此如果堆栈为空,并从地址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堆栈上的最后从堆栈中弹出。
它之所以被称为堆栈,因为它就像一堆纸或盒子。在处理器中,它通常以高地址递减开始,但是只要把它想象成一堆纸,你就可以在纸上写一个数字,然后把它叠起来。当你打开它的时候,你只会得到最上面的一张纸。这对你的理解有帮助吗?
一周热门 更多>