;数据,代码,栈放在不同段程序
assume cs:code,ds:data,ss:stack ;将不同段和不同的寄存器关联起来
data segment ;注意:定义一个段,标识就代表段地址,编译器会翻译成一个地址常量,所以不能
;这样写 mov ds,data 这是错误的
dw 0123h,0456h,0789h,0abch,0defh,0fabh,0fcdh,0feah
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax ;把stack段地址放入ss,stack就是ss段了
mov sp,16 ;设置栈顶cs:sp指向cs:fh,栈空的时候栈顶指向下一个单元
mov ax,data
mov ds,ax ;把data段地址放入ds,data就是ds段了
mov bx,0
mov cx,8
S:push [bx]
add bx,2
loop S ;把ds:0-ds:f 8个字型数据依次放入栈中
mov bx,0
mov cx,8
S2:pop cs:[bx]
add bx,2
loop S2 ;把数据依次出栈
mov ax,4c00h
int 21h
code ends
end start