8086汇编

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