采用不同段编程
assume cs:code,ds:data,ss:stack
;对应段里存储对应数据代码或者栈,并从0开始存储
data segment
dw 0123h,0456,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 ;栈的段地址赋值给ax
mov ss,ax
mov sp,20h
mov ax,data ;数据段的栈地址
mov ds,ax
;“data”"stack"视为地址,不能直接赋给段寄存器
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 ;“start”标识程序入口
回顾可执行文件执行过程
- 由加载者(Debug,command或其他程序)将可执行文件中的程序(描述信息:伪代码;程序组成:汇编指令)加载到内存
- 根据伪代码(start)识别入口并设置CS:IP指向程序入口,从而使程序得以运行
- 程序运行结束后,返回到加载者