天天看點

【彙編語言/底層開發】6、程式中包含多個segment

衆所周知的是,我們所開發的應用程式需依賴于作業系統運作,是以應用程式所使用的記憶體空間必須是安全的,不能與作業系統和其他應用程式相重合。是以,應用程式所需要的空間應當通過作業系統申請。對于我們使用彙編語言開發的程式而言,可以通過在源程式中定義段來擷取記憶體空間。

1、在代碼段中定義資料

在編寫彙程式設計式時,可以直接在代碼段中對資料進行定義。使用dw可以定義若幹個字型資料,每個資料占據兩個位元組。但是由此帶來的問題就是,代碼段中的所有資料在運作時都會當做指令代碼進行處理,是以我們使用dw定義的資料不會被正确識别。為了解決這個問題,我們可以在程式真正的起始位置前和僞指令end後面加上起始标号start:,通過這種方式通知編譯器程式正确的起始位置。這樣程式的架構就像下面這個樣子。

下面就是一個采用這種架構的程式:

2、使用多個段進行資料、代碼和棧的分離

如前一節所叙述的使用起始标号來分隔代碼和資料的方法存在一些問題。主要由:(1)使得程式顯得混亂、可讀性差;(2)如果資料、棧和代碼占用了超過64k的空間,那麼将無法放入一個段中。為了解決這個問題,我們可以定義多個段,分别來儲存資料、棧元素和代碼。

代碼段、資料段和棧段寄存器可以分别在僞指令assume中定義相應的别名,通過這些别名定義代碼段、資料段和棧段。具體的實作過程可參考以下程式段:

繼續閱讀