8086 与 8051 汇编很类似,但又有点不同,主要在于 8051 的程序存在 ROM 中,变量存在 RAM 中;而 8086 的(正在执行的)程序和变量都存在内存中。那么问题来了,我们如何区分 8086 的命令和数据呢?我们将不同东西归到不同的“段”中,一共有 3 种段:
- 数据端
- 堆栈段
- 代码段
这三种段的定义方式都是一样的:
段名 SEGMENT
……
段名 ENDS
那么我们怎么区分哪个是数据、哪个是堆栈、哪个是代码呢?我们需要在代码段中加入一句:
COSEG SEGMENT
ASSUME CS:COSEG, DS:DATA, SS:STACK
COSEG ENDS
其中,ASSUME CS:段名, DS:段名, SS:段名
指定了不同段的类型。
所以我们的程序框架应该是这样的:
STACK SEGMENT
……
STACK ENDS
DATA SEGMENT
……
DATA ENDS
COSEG SEGMENT
ASSUME CS:COSEG, DS:DATA, SS:STACK
START:
MOV AX, DATA
MOV DS, AX
...
COSEG ENDS
END START