您好,欢迎访问一九零五行业门户网

8086指令系统

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
本指令可用在数制转换、函数表查表、代码转换等场合。
其它类似信息

推荐信息