2011-05-29 61 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