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

2021-10-10 21:17:32 字數 2213 閱讀 9187

問題:程式設計計算以下8個資料的和,結果存在ax暫存器中:

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

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 21h

code ends

end start

dw:即「define word」,定義字型資料

因為dw定義的資料處於**段的最開始,所以偏移位址為0,用bx加2得到下個資料的偏移位址

用標號如start可以在源程式中指明程式的入口所在,即編譯,連線後直接執行的部分

end:除了通知編譯器程式結束,還可以通知編譯器程式的入口所在,如上程式中,mov bx,0為第一條指令

程式框架的安排

assume	cs:code

code segment

資料start: **

code ends

end start

問題:利用棧將程式中定義的資料逆序存放

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,30h

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

在**段中定義16個字型資料,我們將獲得32個位元組的記憶體空間,這段記憶體空間,程式將其當做棧空間使用

即我們定義這些0的目的是在於獲得這些0所在的記憶體空間,即開闢了16個字的記憶體空間

assume cs:code, ds:data, ss:stack

data segment

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

data ends

stack segment

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

stack ends

code segment

start: mov ax,stack

mov ss,ax

mov sp,20h ;ss:sp指向棧頂元素,指向stack:20

mov ax,data

mov ds,ax ;ds指向data段

mov bx,0 ;ds:bx指向data段中的第乙個單元

mov cx,8

s: push [bx]

add bx,2

loop s

mov bx,0

mov cx,8

s0: pop [bx]

add bx,2

loop s0

mov ax,4c00h

int 21h

code ends

end start

對段位址的引用

段名相當於乙個標號,即代表了段位址

mov ax,data的含義是將data段的段位址送入ax中

mov ds,data是錯誤的,因為data是乙個數值,8086cpu不允許將乙個數值直接送入段暫存器

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

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

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

6.0 概述 前面的程式中,只有乙個 段,如果程式需要其他空間來存放資料,使用 呢?第5章講過,0 200 0 2ff是相對安全的記憶體空間,但大小只有256個位元組,如果我們需要的空間超過256個位元組,就需要向系統申請。程式取得所需要的空間的方法有兩種,一是在載入時分配,二是執行過程中向系統申請...

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

在作業系統的環境下,合法地通過作業系統取得的空間都是安全的。程式取得所需空間的方法有兩種 一是在引導程式的時候為程式分配,再就程式在執行過程中向系統申請。對於第一種方式,我們在程式中定義將要處理的資料,這些資料被編譯 連線程式作為程式的一部分寫入可執行檔案中。當可執行檔案的程式載入到記憶體中,這些資...