举个栗子

assume cs:code ds:data ss:stack
data segment
dw 0123h,0345h
data ends

stack segment
dw 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 //ds:bx指向data中第一个内存单元

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

看了这个就差不多了,前面定义的时候要注意不同段对应不同的寄存器,而后面要注意各个段有独自的segment与ends,而且从start开始要把各个段寄存器赋值,以备后面使用(mov ax,data)注意 mov ds,data是错误的,8086cpu不允许直接把一个数值送入段寄存器中