上一篇文章中我们实现了数字各个位的分解并打印在屏幕上。他需要我们知道数字有多少个位,并且提前预留出内存空间保存每个位,这显然不是一个完美的解决方案。现在我们来学习一下堆栈,并使用堆栈来保存分解出的每个位,实现可以分解任意位的数字。
先解释一下堆栈
。实际上这个堆栈
和堆(heap)
并没有关系,只是一个纯粹的栈(stack)
,可能是堆栈
这样叫起来更上口一点吧。
堆栈段
和其他段一样,只是一段普通的内存空间,只是我们限制了对这部分内存空间操作的行为。我们只允许通过push(压栈)
和pop(出栈)
这两个指令来操作堆栈段的内存空间,以此来实现一些算法。使用堆栈段
之前需要先初始化段基址(ss)
和栈顶指针(sp)
,例如将ss
初始化为0x0000
,sp
初始化为0x7c00
。此时堆栈段的逻辑地址为0x0000:0x0000
到0x0000:0x7c00
,对应的物理地址为0x00000
到0x07c00
。
大约 6 分钟