2011-05-29 92 views
1

你好!目前我正在学习装配的基本知识。早些时候我使用TASM和Intel语法。在那里我必须以某种方式初始化堆栈。 但现在我正在使用GNU汇编程序和AT & T语法。我浏览了大量的例子,看到没有任何声明/堆栈的初始化。我想知道我是否必须这样做?或者,可能是,这里没有我的帮助?如果是这样,它是如何自动初始化的?在数据段中擦写重要信息有风险吗?我也没有注意到有关堆栈的任何指示。我需要在GAS中初始化堆栈吗?

感谢您的回答! 噢,还有一件事:有没有关于类Unix系统的ASM(GAS)编程的好书?

回答

0

带有虚拟内存的操作系统处理堆栈的方式与没有虚拟内存的操作系统处理堆栈有所不同。

  • 没有VM(例如DOS,μClinux的MMU!):您预留的堆栈一些物理空间。在DOS中,它取决于您使用的内存模型,对于较大的内存模型,您将分配一些内存并将SS(堆栈段)指向它。在μClinux中,您可以将堆栈大小保存在可执行文件格式头的一个字段中,有关示例,请参见bFLT格式。
  • VM→堆栈动态增长,达到可配置限制(请参阅Linux上的ulimit -s)。由于每个进程都有自己的虚拟地址空间,因此堆栈和其他映射的虚拟内存区域之间有很大的空间。
+0

非常感谢您的回答,现在我明白了。是否有任何文献可以就主题提出建议? – Bardo 2011-05-29 14:27:02