5.指令和指令系统
基本概念
1.指令: 控制计算机完成某种操作的命令
2.指令系统: 处理器所能识别的所有指令的集合
3.指令的兼容性: 同一系列机的指令都是兼容的
指令寻址方式
1.立即数寻址
例: MOV AX,1200H
2.寄存器寻址
例: MOV AX,BX
3.存储器操作数寻址方式
--------------------------------------------------
1.直接寻址
例: MOV AX,[1200H]
直接寻址下默认操作数在数据段,但允许段重设
例: MOV AX,ES:[1200H]
--------------------------------------------------
2.寄存器间接寻址(for 循环)
有四个通用寄存器可存放数据的偏移地址:BX,BP,SI,DI
ps:BX,SI,DI默认在数据段,BP默认在堆栈段
例: MOV BX,1200H
MOV AX,[BX] 等同于 MOV AX,[1200H]
--------------------------------------------------
3.寄存器相对寻址(for 一维数组)
例: MOV AX,[BX+DATA] DATA为位移量
--------------------------------------------------
4.基址,变址寻址
基址寄存器内容 + 变址寄存器内容
BX(数据段)
BP(堆栈段)
例: MOV SI,1100H
MOV BX,SI
MOV AX,[BX + SI] (AX:[2200H])
--------------------------------------------------
5.基址,变址,相对寻址
例: MOV DI,1100H
MOV BP,DI
MOV AL,[BP][DI]5
--------------------------------------------------
6. 8086指令系统
一般数据传送指令 (MOV)
注意点:
1.两操作数字长必须相同
2.两操作数不允许同时为存储器操作数
3.两操作数不允许同时为段寄存器
4.在原操作数是立即数时,目标操作数不允许为段寄存器
5.IP 和 CS 不作为目标操作数,FLAGS 一般也不作为操作数在指令中出现
堆栈操作指令
1.先进后出
2.以字为单位(16位)
压栈指令: PUSH OPRD
出栈指令: POP OPRD
OPRD为16位寄存器或者存储器的两个单元
3.注意点:
1.指令操作数必须是16位
2.操作数可以是寄存器或存储器单元,但不能是立即数
3.不能从栈顶弹出一个字给CS
交换指令
格式: XCHG REG ,MEM/REG
注:
1.两操作数必须有一个是寄存器操作数
2.不允许使用段寄存器
查表指令 (零操作数/单操作数)
格式: XLAT
注:
1.用 BX 的内容代表一维数组首地址, AL 内容为数组内位移量, BX + AL 得到要查找元素的偏移地址
操作:将 BX + AL所指单元的内容送给 AL
字位扩展指令 (零操作数指令)
将符号数的符号位扩展到高位
格式 CBW :
将AL内容扩展到AX (8位->16位)
若最高位 = 1,执行后 AH =FFH
若最高位 = 0,执行后 AH =00H
格式 CWD :
将AX内容扩展到 DX AX (16位->32位)
若最高位 = 1,执行后 AH =FFFFH
若最高位 = 0,执行后 AH =0000H
输入输出指令
I/O端口: 用于存储数据,可以直接