汇编语言学习--包含多段的程序
1.程序获得所需的空间有两种,一种是加载程序时为程序分配,另外一种是程序在执行的过程中向系统请求空间。
2.在代码段中使用数据
从规范的角度上讲,我们是不能随便的给程序分配空间,应该让系统给我们分配,当我们的执行文件中的程序被加载到内存时,数据也被同时加载,此时我们的数据就获得了所需要的空间了
assume cs : code
code segment
dw 0123h, 0456h,0798h ;dw代表定义字型数据,这些数据的地址应当在cs:bx上!由于其段地址就放在cs上
start: mov bx , 0 ;指明了程序的入口!dw后面的数据都是系统来分配的
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
3.在代码段中使用栈
1.设置栈顶
start : mov ax , cs
mov ss , ax
mov sp , 30h ;设置栈顶cs:30
mov bx , 0 ;数据cs:0
mov cx , 8
s: push cs : [bx]
add bx , 2
loop s
4.将数据,代码,栈放入不同的段
代码
assume cs : code , ds : data , ss : stack
data segment
dw 0123h, 0456h,0789h
data ends
stack segment
dw 0,0,0,0,0
code segment
start: mov ax , stack
mov ss , ax ;8086中,不能之直接将一个数据放入段地址中
mov sp ,20h ;设置了栈顶指向了stack:20h
mov ax , data
mov ds , ax ;ds指向了data,含义是,将名称为“data”的段的段地址送入ax中,一个段中的数据的段地址可有段名代表,偏移地址就要看这个数据在这个段中的位置了
mov bx , 0
mov cx , 8
s: push [bx] ;默认为ds:bx
add bx , 2
loop s
mov bx , 0
s0: pop [bx]
add bx , 2
loop s0
mov ax , 4c00h
int 21h
code ends
end start