組合語言 多個段的程式

2022-08-17 01:48:22 字數 1638 閱讀 9828

下面**展示了多段程式,功能是將data中的資料,翻轉儲存

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

mov ax,data

mov ds,ax

mov bx,0

mov cx,8

s:push [bx]

add bx,2

loop s

mov bx,0

mov cx,8

s2:pop [bx]

add bx,2

loop s2

mov ax,4c00h

int 21h

code ends

end start

功能介紹:定義三個段,然後將stack段,作為堆疊段;將data作為資料段;將code作為**段。通過**段中**,將資料段中資料儲存到堆疊段中,然後在pop出來,儲存在資料段中。

code segment

start: mov ax,stack

.........

mov ax,4c00h

int 21h

code ends

end start

start:正如我們之前介紹的標記一樣,start也是一樣的,表示所在指令段的偏移位址。如同code,表示上面定義**段的偏移位址。

end start

告訴編輯器,在**段中**從何處開始。

assume cs:code是給code段中的標號找了個段暫存器,就這點作用。

具體看下面論壇:

在上面**中,定義了三個段。三個段,分別分別為datastackcode,大概框架如下:

data segment

......data ends

stack segment

......stack ends

code segment

......code ends

這裡需要說明幾點:編譯連線一開始展示的**,在debug中除錯程式。發現data位址在系統分配記憶體的最開始,stack位址在data的後面,code段在stack的後面。

每個段的大小,最少為10h大小。段位址,最少為16的倍數。因此,雖然data段中只填入了兩個字單元,但還是占用了16個位元組的單元。

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

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

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

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

《組合語言》學習(六)多個段的程式

組合語言 第六章主要講述 如何編寫包含多個段的彙編源程式 本章的文字內容不多,主要通過程式設計實踐來理解彙編源程式架構的含義,通篇學下來,我覺得有以下幾點需要理解清楚 1,這裡所說的多個段 segment 從彙編 程式 的角度來說,它指的是程式所占用的記憶體空間的劃分,大致分為 data segme...