汇编语言多段程序设计
- 什么是多段汇编程序设计
首先我们需要知道什么是程序段,请看程序
assume cs:code;给cs一个名字code
;代码段开始
code segment
mov ax,0000h
mov bx,0001h
add ax,bx
mov ax,4c00h
int 21h
;代码段结束
code ends
end
我们的代码一般写在code segment............code ends end里面,这个就是一个代码段。
- 在代码段内定义连续的变量
比如,我们需要对一个连续空间用来存放连续的值,比如 1,2,3,4,5,6,7,10这些变量。这时,我们需要一个伪代码 dw(define Word)
如:dw 1,2,3,4,5,6,7,10
在编译的时候会从cs:0000开始连续的存放进去。代码:
assume cs:code
;代码段开始
code segment
;数据
dw 1h,2h,3h,4h,5h,6h,7h,8h;定义连续的空间存放1,2,3,4,5,6,7,8
start:;开始代码段
mov ax,0000h
mov bx,0001h
add ax,bx
mov ax,4c00h
int 21h
;代码段结束
code ends
end start;结束
可以写成如下格式
assume cs:code
code segment
.....................
数据
....................
start:
代码
....................
code ends
end start
- 不同的段
其实除了代码段,汇编语言编译器还提供了栈段,数据段。
比如:
数据段:assume ds:data
栈段:assume ss:stack
代码段 assume cs:code
我们可以在数据段中定义数据,在栈段可以定义栈的数据。
比如:
assume cs:code,ds:data,ss:stack;给每个段取个名字,你自己可以自定义
data segment;数据段的内容
dw 1h,2h,3h,4h,5h,6h
data ends
stack segment;栈段的内容
dw 0h,0h,0h,0h,0h,0h,0h,0h,0h,0h,0h,0h,0h,0h,0h,0h
stack ends
code segments
start:
mov ax,stack
mov ss,ax
mov ax,data
mov ds,ax
mov bx,0000h
mov cx,7h
s:
mov ax,ds:[bx]
push ax
add bx,2h
loop s
mov ax,4c00h
int 21h
code ends
end start
- 段的大小
cs的段的大小是从cs:0000~cs:ffff
ds的段的大小是从的ds:0000~cs:ffff
ss的段的大小是从ss:0000~cs:ffff
es的段的大小是从es:0000~cs:ffff