包含多個段的程式

2021-09-24 12:28:43 字數 1201 閱讀 1291

在前一章我們提到0:200~0:2ff位址空間是相對安全的,但是這段空間的容量只有256個位元組。

在作業系統中只要是通過作業系統申請的空間就都是安全的,作業系統負責給程式分配安全的空間。在作業系統允許的情況下,程式可以取得任意數量的空間。

按程式獲取所需空間的時間,獲取空間方法可分為兩種:

在引導程式的時候為程式分配

在程式執行的過程中向系統申請

本書中不論描述第二種

對於匯程式設計序,如果需要他在被載入的時候取得所需的空間,就必須要在源程式中做出說明,對於彙編源程式來講就是在彙編源程式中做出相應段的宣告。

這樣的想法是,在**段中宣告了資料。那麼作業系統將其載入進入記憶體的時候就不可避免的需要為這些宣告在**段中的資料分配空間。雖然這樣子看起來不是十分的優雅。

並且對於這個來說,還需要自己來計算資料的儲存位置。

同時如果匯程式設計序的開頭不是指令的話,那麼就需要end宣告來說明匯程式設計序的開始。給作業系統乙個提示,告訴作業系統,程式的入口,在某某標號處。

在單任務作業系統中,可執行檔案中的程式執行過程如下:

由其他程式將可執行檔案中的程式加載入記憶體

設定cs:ip,即設定程式的入口(第一條要執行的指令)

執行結束,返回

偽指令end就是描述乙個程式的入口,比如end start那麼在編譯連線以後,end指令指定的程式入口為start(乙個標號位址),被轉換稱為乙個入口位址,儲存在可執行檔案的描述資訊中。作業系統就根據次資訊,設定cs:ip。

為什麼要這麼做。事實上,不管怎麼做,實際在記憶體中並沒有很大的區別,那麼為什麼需要這個各個不同的段呢。

這實際上是為了適應我們人類的思維,讓源**看起來更加的優雅易讀。

我們在彙編源程式中宣告了不同的段,分別用來儲存資料和**。事實上這個全部都放在乙個段裡面之後被載入進記憶體並沒有多大的區別。

我們不需要計算資料程式的位址,而直接可以時候段名來代替。

在說一遍,段暫存器是不能夠直接使用直接量的,段名也不行,所以必須使用通用暫存器來做中轉。

cx中的程式長度為整個彙編原始檔翻譯稱為機器指令的長度,包括資料段

乙個段至少會占用16個位元組,

資料段是定義在程式段之前還是之後都無所謂

來自為知筆記(wiz)

posted @

2019-06-16 12:15

秦曉 閱讀(

...)

編輯收藏

8086彙編 包含多個段的程式

assume cs code code segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h start mov bx,0 mov ax,0 mov cx,8 s add ax,cs bx add bx,2 loop s mov ax,...

6 包含多個段的程式

1 如果程式要存放資料,要使用什麼地方,第五章講到了一塊安全的空間0 200 0 2ff是相對安全的,可這段空間的容量只有256個位元組,如果我們需要的空間超過256個位元組又該如何呢?取得空間的方法有兩種,一種是引導程式的時候為程式分配 堆疊 再就是程式執行過程中向系統申請 堆 對於第一種方法 1...

組合語言之包含多個段的程式

一 段和資料段同時存在 首先我們編寫乙個程式,將0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h累加並存放在ax中。assume cs code code segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0c...