包含多个段的程序

一、在代码段中使用数据

1. dw

dw: define word,定义字型数据。由于运行在代码段中,可以从cs寄存器中获得数据,因为定义在代码段开始的位置,所以偏移地址为0。

assume cs:code
code segment
	dw 0123h,0456h,0789h,0abch,0defh,0cbah,0987h
	mov bx,0
	mov ax,0
	mov cx,8
s:  add ax,cs:[bx]
	add bx,2
	loop s
	
	mov ax,4c00h
	int 21h
code ends
end

2. start标号

start伪指令指向程序第一条执行的指令。需要在end后面出现。

assume cs:code
code segment
	dw 0123h,0456h,0789h,0abch,0defh,0cbah,0987h
    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
code ends
end

3. 程序框架

assume cs:code
code segment
数据
start:
代码
code ends
end start

二、在代码段中使用栈

同样在开头用dw申请数据空间。将ss赋值为cs,sp赋值为对应地址。

三、将数据、代码、栈放入不同的段

一个段的容量不能大于64kb

用多个段存放数据,代码和栈

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
	s0: pop [bx]
		add bx,2
		loop s0
		
		mov ax,4c00h
		int 21h
code ends
end start

mov ax,data

mov ds,ax

mov ds,data(不能将一个数值直接送入段寄存器)