下面**展示了多段程式,功能是將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段中的標號找了個段暫存器,就這點作用。
具體看下面論壇:
在上面**中,定義了三個段。三個段,分別分別為data
,stack
,code
,大概框架如下:
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...