安防之家讯:8086的指令系统可以分为以下六个功能组: 1.数据传送(Data Transter)
2.算术运算(Arithmetic)
3.逻辑运算(Logic)
4.串操作(String menipulation)
5.程序控制(Program Control)
6.处理器控制(Processor Control)
一、数据传送指令
主要介绍 MOV,XCHG、堆栈和地址传送指令。
1.数据传送MOV指令
一般格式MOVOPRD1,OPRD2
MOV 是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。
功能完成数据传送。
具体来说,一条数据传送指令能实现:
⑴ CPU内部寄存器之间数据的任意传送(除了代码段寄存器CS和指令指针IP以外)。
MOVAL,BL;字节传送
MOVCX,BX;字传送
MOVDS,BX
⑵ 立即数传送至CPU内部的通用寄存器组(即AX、 BX、CX、DX、BP、SP、SI、DI),
MOVCL,4
MOVAX,03FFH
MOVSI,057BH
⑶ CPU内部寄存器(除了CS和IP以外)与存储器(所有寻址方式)之间的数据传送。
MOVAL,BUFFER
MOVAX,[SI]
MOV[DI],CX
MOVSI,BLOCK[BP]
MOVDS,DATA[SI+BX]
MOVDEST[BP+DI],ES
⑷ 能实现用立即数给存储单元赋值
例如:MOV[2000H],25H
MOV[SI],35H
对于MOV 指令应注意几个问题:
①存储器传送指令中,不允许对CS和IP进行操作;
②两个操作数中,除立即寻址之外必须有一个为寄存器寻址方式,即两个存储器操作数之间不允许直接进行信息传送;
如我们需要把地址(即段内的地址偏移量)为AREAl的存储单元的内容,传送至同一段内的地址为AREA2的存储单元中去,MOV指令不能直接完成这样的传送,但我们可以CPU内部寄存器为桥梁来完成这样的传送:
MOVAL,AREAl
MOVAREA2,AL
③两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;如:MOV AX,0;MOV DS,AX
④目的操作数,不能用立即寻址方式。
2.堆栈指令(简述堆栈的概念及存取特点,如先进后出)
包括入栈(PUSH)和出栈(POP)指令两类。仅能进行字运算。(操作数不能是立即数)
(1) 入栈指令 PUSH
一般格式PUSHOPRD
源操作数可以是CPU内部的16位通用寄存器、段寄存器(CS除外)和内存操作数(所有寻址方式)。入栈操作对象必须是16位数。
功能将数据压入堆栈
执行步骤为:SP=SP-2;[SP]=操作数低8位;[SP+1]= 操作数高8位
【例如】 PUSHBX
执行过程为:SP=SP-1,[SP]=BH;SP=SP-1,[SP]=BL,如下图所示。
(2) 出栈指令POP
一般格式POPOPRD
功 能 将数据弹出堆栈
对指令执行的要求同入栈指令。
【例如】POP AX
POP [BX]
POP DS
3.交换指令XCHG
一般格式XCHG OPRD1,OPRD2
功 能 完成数据交换
这是—条交换指令,把一个字节或一个字的源操作数与目的操作数相交换。交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。
【例如】 XCHG AL,CL
XCHGAX,DI
XCHGBX,SI
XCHGAX,BUFFER
XCHGDATA[SI],DH
4.累加器专用传送指令
有三种,输入、输出和查表指令。前两种又称为输入输出指令。
(1) IN 指令
一般格式
IN AL,n ; B AL←[n]
IN AX,n ; WAX←[n+1][n]
IN AL,DX; BAL←[DX]
IN AX,DX ; WAX←[DX+1][DX]
功能从I/O端口输入数据至AL或AX。
输入指令允许把一个字节或一个字由一个输入端口传送到AL或AX中。若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。
(2) OUT 指令
一般格式 OUTn,AL; BAL→[n]
OUTn,AX; W AX→[n+1][n]
OUTDX,AL ;BAL→[DX]
OUTDX,AX ;W AX→[DX+1][DX]
功能将AL或AX的内容输出至I/O端口。
该指令将AL或AX中的内容传送到一个输出端口。端口寻址方式与IN指令相同。
(3)XLAT指令
一般格式XLAT; AL=(DX)×16+(BX)+(AL))
功能完成一个字节的查表转换。
要求:①寄存器AL的内容作为一个256字节的表的下标。②表的基地址在BX中,③转换后的结果存放在AL中.TABLE:
【例如】MOV BX,OFFSET TABLE
MOV AL,8 ……
INAL,1第9个字符 AAH
XLAT ;查表
OUT1,AL;(AL)= AAH 表长度256
本指令可用在数制转换、函数表查表、代码转换等场合。
安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/