包含多个段的程序
以前编写的程序我们都用到了一个段-代码段。要是程序需要其他空间来存放数据的话,我们就需要定义其他的段了。我们以前的操作的数据信息都是从内存单元里取得,并没有操作我们想要操作的数据,定义其他的段就是给我们提供一个个的空间来存放我们自己想要操作的信息。
接下来尝试将数据,代码,栈放入不同的段\(^o^)/
我们这样做就是为了将代码,数据,栈段分开,避免导致混乱,尤其是随着编程能力的提高我们用到的数据,代码,栈等越来越多,合理的定义不同的段空间更能优化我们的程序。下面举个例子。。
assume cs:code ,ds:data,ss:stack; 我们定义了代码段,数据段,堆栈段,并分别把他们与相应的段寄存器相连接
data segment ;这就是我们定义的数据段的内容里边存放了8个数据
dw 1,2,3,4,5,6,7,8 ;此处dw是定义一个字单元的意思,,向系统 ;申请8个字单元
data ends
stack segment ;每个段的定义格式以及使用格式都是一样的
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax ;此处注意我们在关联ss时一定把堆栈指针寄存 ;器一块赋值否则会报错
mov sp,16
mov ax,data
mov ds,ax
mov cx,8
mov bx,0
s: push [bx]
add bx,2
loop s
mov bx,0
mov cx,8
s1:pop [bx]
add bx,2
loop s1
mov ax,4c00h
int 21h
code ends
end start
data segment ;这就是我们定义的数据段的内容里边存放了8个数据
dw 1,2,3,4,5,6,7,8 ;此处dw是定义一个字单元的意思,,向系统 ;申请8个字单元
data ends
stack segment ;每个段的定义格式以及使用格式都是一样的
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax ;此处注意我们在关联ss时一定把堆栈指针寄存 ;器一块赋值否则会报错
mov sp,16
mov ax,data
mov ds,ax
mov cx,8
mov bx,0
s: push [bx]
add bx,2
loop s
mov bx,0
mov cx,8
s1:pop [bx]
add bx,2
loop s1
mov ax,4c00h
int 21h
code ends
end start
此段 代码的意思就是将数据段的数据入栈然后在出站,从而我们体会不同段空间的使用方法。呵呵今天的任务完成喽。。