assume cs:code, ds:data, ss:stack
data segment
dw 0000H, 0002H, 0002H, 0004H, 0008H, 0001H, 0100H, 1000H
data ends
stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends
code segment
start: mov ax, stack ;ax=栈段首地址
mov ss, ax ;ss赋值为栈段首地址
mov sp, 16 ;2*8=16
mov ax, data
mov ds, ax ;data段首地址赋值给ds
mov bx, 0 ;bx=0
mov cx, 8 ;cx=8
s:push [bx] ;data段的数据入栈
add bx, 2 ;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
上面这段与下面这段等效:
assume cs:code, ds:data, ss:stack
data segment
dw 0000H, 0002H, 0002H, 0004H, 0008H, 0001H, 0100H, 1000H
data ends
stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 16
mov ax, data
mov ds, ax
push ds:[0]
push ds:[2]
push ds:[4]
push ds:[6]
pop ds:[6]
pop ds:[4]
pop ds:[2]
pop ds:[0]
mov ax, 4c00H
int 21H
code ends
end start