筆記 組合語言 第6章 包含多個段的程式

2022-03-06 17:06:58 字數 1751 閱讀 1785

6.0 概述

前面的程式中,只有乙個**段,如果程式需要其他空間來存放資料,使用**呢?

第5章講過,0:200~0:2ff是相對安全的記憶體空間,但大小只有256個位元組,如果我們需要的空間超過256個位元組,就需要向系統申請。

程式取得所需要的空間的方法有兩種,一是在載入時分配,二是執行過程中向系統申請,本課程不討論第二種方法。

我們若要在乙個程式被載入時取得所需空間,必須要在源程式中作出說明,我們通過在源程式中定義段來進行記憶體空間的獲取。

6.1 在**段中使用資料

示例程式:

assume cs:code

code segment

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

mov bx,0

mov ax,0

mov cx,8

s:add ax,cs:[bx]

add bx,2

loop s

mov ax,4c00h

int 21

code ends

end注:其中,dw是"define word"的縮寫,即定義字型資料。

該程式中定義的資料處於**段中,位址為cs:0,cs:2,cs:4,cs:6,cs:8,cs:a,cs:c,cs:e。

程式編譯鏈結後無法正常執行,因為**段的入口是資料,不是指令。可以用end偽指令來指明程式入口。

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,4c00h

int 21

code ends

end start

>>>>乙個可執行檔案由描述資訊和程式組成,程式來自於源程式中的彙編指令和定義的資料;描述資訊則主要是編譯、連線程式對源程式中相關偽指令進行處理得到的資訊<<<<

6.2 在**段中使用棧

示例程式:

assume cs:code

code segment

dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h

dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

start: mov ax,cs

mov ss,ax

mov sp,30

mov bx,0

mov cx,8

s:   push cs:[bx]

add bx,2

loop s

mov bx,0

mov cx,8

s0:  pop cs:[bx]

add bx,2

loop s0

mov ax,4c00h

int 21h

code ends

end start

6.3 將資料、**、棧放入不同的段

(1) 定義多個段的方法

與定義**段的方法沒有區別,只是不同的段要有不同的段名。

(2) 對段位址的引用

在程式中,段名就相當於乙個標號,它代表了段位址。

(3) 資料段、**段、棧段,完全是我們自己的安排

實驗5 編寫、排程具有多個段的程式

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

問題 程式設計計算以下8個資料的和,結果存在ax暫存器中 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h assume cs code code segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,...

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

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

組合語言讀書筆記(6 包含多個段的程式)

組合語言 第三版,王爽 讀書筆記 dw 即 define word 定義字型資料,存放在 段中 cs 示例程式 assume cs code code segment dw 0123h,0456h,0789h,0abch,0defh,ofedh,0cbah,0987h start mov bx,0 ...