一、寄存器
8086 CPU有14个16位的寄存器,这些寄存器可以分为以下几类:
- 通用寄存器:AX, BX, CX, DX。这些寄存器通常用于算术和逻辑运算,以及数据传送等操作。
- 索引和基址寄存器:SI, DI, BP, BX。这些寄存器通常用于间接寻址。
- 堆栈指针和栈基指针:SP, BP。这些寄存器用于管理堆栈。
- 指令指针:IP。这是一个特殊的寄存器,它自动指向下一条要执行的指令的地址。
- 段寄存器:CS, DS, SS, ES。这些寄存器用于保存段地址。
二、指令
1. 数据传送指令
MOV
:数据传送指令,如MOV AX, BX
(将BX寄存器的内容传送到AX寄存器)。PUSH
和POP
:堆栈操作指令,用于将数据压入或弹出堆栈。XCHG
:交换指令,用于交换两个寄存器或内存位置的内容。
2. 算术指令
ADD
:加法指令。SUB
:减法指令。MUL
:无符号乘法指令。IMUL
:有符号乘法指令。DIV
:无符号除法指令。IDIV
:有符号除法指令。
3. 逻辑指令
AND
:逻辑与指令。OR
:逻辑或指令。XOR
:逻辑异或指令。NOT
:逻辑非指令(通常用于单个操作数)。
4. 控制流指令
JMP
:无条件跳转指令。Jcc
(如JE
,JNE
,JG
,JL
等):条件跳转指令,根据标志位的状态决定是否跳转。CALL
:调用子程序或过程。RET
:从子程序或过程返回。
5. 标志位操作指令
CLC
:清除进位标志。STC
:设置进位标志。CMC
:进位标志取反。CLD
:清除方向标志(使数据地址递增)。STD
:设置方向标志(使数据地址递减)。
三、语法
- 标识符:标识符用于命名变量、标签等。标识符应以字母、下划线或
?
开头,后面可以跟字母、数字、下划线或?
。 - 数据定义:使用
DB
,DW
,DD
等伪指令定义数据。例如,DB 10H, 20H
定义了两个字节的数据。 - 段定义:使用
ORG
,END
等伪指令定义代码段、数据段等。 - 指令格式:指令通常由操作码和操作数组成。操作码指定了要执行的操作,操作数指定了操作的对象。
- 注释:使用
;
(分号)添加注释,以提高代码的可读性。
四、寻址方式
8086支持多种寻址方式,包括立即数寻址、寄存器寻址、直接内存寻址、寄存器间接寻址、基址加变址寻址等。
五、示例
以下是一个简单的8086汇编程序示例,用于将两个数相加并输出结果:
ORG 100h ; 设置程序起始地址
MOV AX, 1234H ; 将16进制数1234H加载到AX寄存器
MOV BX, 5678H ; 将16进制数5678H加载到BX寄存器
ADD AX, BX ; 将BX寄存器的值加到AX寄存器上
; 假设这里有一个输出AX寄存器值的程序(略)
MOV AH, 4CH ; DOS中断调用号,用于程序退出
INT 21H ; DOS中断调用
END