2010年5月3日 星期一

[組語] SEGMENT

之前已經提過 SEGMENT 假指令了,事實上 SEGMENT 後面有許多選項可供選擇,當您寫副程式製作成程式庫,或是寫很大的程式把它切割成數個小程式再合併時,要注意這些選項。其語法是:

區段名 segment 排列型式 合併型式 類別名

排列型式 (align type) 是告訴連結程式該區段由那一種位址開始,或者說此區段排在前一區段後的那一種位址開始。可以選擇的位址種類有下面幾種:

1. byte:由某一位元組開始,也就是任意位址開始,視載入 DOS 驅動程式多寡以及前面區段大小決定。
2. word:由某一字組開始,也就是從偶數位址開始。
3. dword:由某個雙字組開始,一個雙字組是 4 個位元組。
4. para:由某一節開始,節的英文是 paragraph,一節的大小是 10H 個位元組,也就是十進位的 16 個位元組。
5. page:由某一頁 (page) 開始,一頁是 100H 個位元組。

前面幾章的例子中,都省略排列形式,則連結器自動用 para 選項,也就是說沒有排列形式時,MASM 內定選項是 para。

合併型式 (combine type) 是告訴連結器該區段和程式庫內或其他目的檔內的那一個區段連結在一起成為一個區段。可以用的選項有:

1. none:不與其他區段合併。
2. public:具有相同名稱且相同類別名的區段合併成一個區段。
3. common:具有相同名稱的區段合併成一個區段。
4. at 位址:區段被置於特定位址。
5. stack:表示此區段為堆疊區段。
6. memory:使區段置於最高位址。

雖然 segment 的用法很複雜,但是最常用的還是『stack』、『public』。因為在主程式中要使用程式庫,或者要把某個副程式加入程式庫都必須宣告『public』及類別名,使連結程式 (LINK.EXE) 能順利把各區段正確連結。
參考資料:
SEGMENT 假指令

沒有留言: