包含多个段的程序
在代码段中使用数据:
assume cs:codesg
codesg srgment
dw 0123, 0456, 0789, 0abc, 0def, 0fed, 0cba, 0987
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
codesg ends
end start
dw:定义字型数据,dw即define word
数据之间以逗号隔开。
用dw定义的数据处于代码段的最开始,所以偏移地址为0,
这8个数据的偏移地址为0,2,4,6,8,A,C,E处
在代码段中使用栈:
在段中实现数据的逆序存放:依次将数据单元入栈,然后再依次出栈到这
数据所属的字单元中,从而实现数据的逆序存放
assuse cs:codesg
codesg segment
dw 0, 0, 0, 0, 0, 0, 0, 0 ;dw定义8个字型数据,在程序加载后
;将获得8个字的内存空间,在后面的程序中当作栈来使用
start:
mov ax, cs
mov ss, ax
mov sp, 32 ;设置栈顶ss:sp指向cs:32
mov bx, 0
mov cx, 8
s: push cs:[bx]
add bx, 2
loop s ;以上将代码段0~16单元中的8个字型数据一次压入栈
mov bx, 0
mov cx, 8
s0: pop cs: [bx]
add bx, 2
loop s0 :依次出栈
mov ax, 4cooh
int 21h
codesg ends
end start
将数据,代码,栈放入不同的段:
assuse cs:codesg, ds:data, ss:stack ;代码段codesg,数据段data,栈段stack(封装)
data segment
dw 0123, 0456, 0789, 0abc, 0def, 0fed, 0cba, 0987
data ends ;将获得8个字的内存空间,在后面的程序中当作栈来使用
stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends
codesg segment
start: ;cpu将start当作指令来执行
mov ax, stack
mov ss, ax ;ss段的寄存器
mov sp, 16 ;指向栈。设置栈顶ss:sp指向stack:16
mov ax, data
mov ds, ax
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, 4cooh
int 21h
codesg ends
end start