跳至主要內容
汇编语言一发入魂 0x04 - 堆栈

上一篇文章中我们实现了数字各个位的分解并打印在屏幕上。他需要我们知道数字有多少个位,并且提前预留出内存空间保存每个位,这显然不是一个完美的解决方案。现在我们来学习一下堆栈,并使用堆栈来保存分解出的每个位,实现可以分解任意位的数字。

先解释一下堆栈。实际上这个堆栈堆(heap)并没有关系,只是一个纯粹的栈(stack),可能是堆栈这样叫起来更上口一点吧。

堆栈段和其他段一样,只是一段普通的内存空间,只是我们限制了对这部分内存空间操作的行为。我们只允许通过push(压栈)pop(出栈)这两个指令来操作堆栈段的内存空间,以此来实现一些算法。使用堆栈段之前需要先初始化段基址(ss)栈顶指针(sp),例如将ss初始化为0x0000sp初始化为0x7c00。此时堆栈段的逻辑地址为0x0000:0x00000x0000:0x7c00,对应的物理地址为0x000000x07c00


未央大约 6 分钟汇编语言堆栈