2011-05-07 63 views
3

嗨,我剛開始學習彙編和這裏基本問題就是我不明白...有關堆棧段聲明

堆棧段宣言,我們使用類似

 TOS LABEL WORD 

我知道TOS指的是堆棧的頂部,但不明白它後面是什麼以及有什麼用處。幫助將不勝感激。

回答

3

你在這裏做的是定義一個標籤(堆棧指針(SP)),它包含棧頂的地址。標籤將始終包含最後一個值的推送地址。

  • 當調用的按壓操作,一寄存器或存儲器位置 的 內容被複制到堆棧和 的SP遞減。

  • 當調用POP,其中 SP指向(在TOS)被複制到任何寄存器或存儲器位置的內容,你就造成它和SP 遞增。

爲常量或變量標記任何地址的用法是,它比在十六進制中將其位置寫入內存更容易。

編輯

爲什麼它在PUSH遞減的原因是因爲一個堆棧每個新值被壓在內存中向下增長。所以如果你想把書放在一個盒子裏,盒子底部的位置是100,你可以在內存位置100添加一本書。然後再添加一本書,它位於內存位置99.內存位置99然後變成TOS。

編輯2 一些彙編程序使用LABEL作爲指令,有些則不使用。所以在這種情況下,TOS是'標籤',而WORD是數據類型。

所以,你可以有:

label1 LABEL WORD 
. 
.;code 
. 

或其他彙編器(什麼我已經習慣了),簡單地說:

label1: 
. 
. 
. 

起初,我不知道你用什麼情況下這是我使用的資源:http://www.emu8086.com/assembler_tutorial/compatibility.html

+0

so WORD是堆棧指針的名稱在這裏?另外,如果某些東西被推入堆棧,不應該增加值嗎? – dawnoflife 2011-05-07 13:48:31

+0

是的,WORD是標籤的名稱。該值不會增加,因爲它沒有給出堆棧的大小。它只是指向內存位置。它遞減的原因是隨着每個新值被推送,堆棧在內存中向下增長。 – 2011-05-07 13:59:24

+0

我很抱歉用問題轟炸你,但如果LABEL是關鍵字,TOS是什麼。我想我知道這意味着什麼,但現在我很困惑 – dawnoflife 2011-05-07 14:05:05