先上程序:
assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data endsstack segmentdw 0,0,0,0,0,0,0,0,0,0
stack endscode segmentstart: mov ax,stackmov ss,axmov sp,20hmov ax,datamov ds,axmov bx,0mov cx,8s: push [bx]add bx,2loop smov ax,4c00hint 21h
code endsend start
定义多个段:
定义多个段,就要使用segment…ends,注意的是,要用不同的段名,像上面面的程序,定义了3个段,code,data,stack就是段名
段地址:
code,data,stack就是段地址,比如我们要访问data段的数据:
mov ax,data
mov ds,ax
mov bx,0
push [bx]
将段地址data传送到ds段寄存器中,我们就可以访问了
注意:
- 代码段、数据段、栈段完全是我们的安排、我们在上面的程序中取了code,data,stack这些段,这些标号是我们自己取得,我们完全可以取其他名字
- 我们在使用:
assume cs:code,ds:data,ss:stack
assume是伪指令,是由编译器执行的,cpu并没有将cs指向code,ds指向data,ss指向stack
- 若要CPU按照我们的安排做事,就要用机器指令去控制它,比如说设置ss指向stack
mov ax,stack
mov ss,ax
mov sp,20h