2021-07-02 12:30发布
有人能告诉我堆栈指针在下面的代码中是如何工作的吗?因为我是这个领域的新手:
CSEG AT 0H MOV 0x40, #5MOV 0X41, #6PUSH 0X41 PUSH 0X40 POP 0X41 POP 0X40 END
堆栈通常向下递进,因此如果堆栈为空,并从地址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个标签!
堆栈通常向下递进,因此如果堆栈为空,并从地址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堆栈上的最后从堆栈中弹出。
一周热门 更多>