你的位置: 首页> 通信技术> 汇编语言

8086指令系统

2016-10-24 13:52:59 |人围观 | 评论:

8086的指令系统可以分为以下六个功能组:

1.数据传送(Data Transter)

2.算术运算(Arithmetic)

3.逻辑运算(Logic)

4.串操作(String menipulation)

5.程序控制(Program Control)

6.处理器控制(Processor Control)

一、数据传送指令

主要介绍 MOV,XCHG、堆栈和地址传送指令。

1.数据传送MOV指令

一般格式  MOV  OPRD1,OPRD2

MOV 是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。

功  能    完成数据传送。

具体来说,一条数据传送指令能实现:

⑴ CPU内部寄存器之间数据的任意传送(除了代码段寄存器CS和指令指针IP以外)。

MOV  AL,BL;字节传送

MOV  CX,BX;字传送

MOV  DS,BX

⑵ 立即数传送至CPU内部的通用寄存器组(即AX、 BX、CX、DX、BP、SP、SI、DI),

MOV  CL,4

MOV  AX,03FFH

MOV  SI,057BH

⑶ CPU内部寄存器(除了CS和IP以外)与存储器(所有寻址方式)之间的数据传送。

MOV  AL,BUFFER

MOV  AX,[SI]

MOV  [DI],CX

MOV  SI,BLOCK[BP]

MOV  DS,DATA[SI+BX]

MOV  DEST[BP+DI],ES

⑷ 能实现用立即数给存储单元赋值

例如:MOV  [2000H],25H

MOV  [SI],35H

对于MOV 指令应注意几个问题:

①存储器传送指令中,不允许对CS和IP进行操作;

②两个操作数中,除立即寻址之外必须有一个为寄存器寻址方式,即两个存储器操作数之间不允许直接进行信息传送;

如我们需要把地址(即段内的地址偏移量)为AREAl的存储单元的内容,传送至同一段内的地址为AREA2的存储单元中去,MOV指令不能直接完成这样的传送,但我们可以CPU内部寄存器为桥梁来完成这样的传送:

MOV  AL,AREAl

MOV  AREA2,AL

③两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;如:MOV AX,0;MOV DS,AX

④目的操作数,不能用立即寻址方式。

2.堆栈指令    (简述堆栈的概念及存取特点,如先进后出)

包括入栈(PUSH)和出栈(POP)指令两类。仅能进行字运算。(操作数不能是立即数)

(1) 入栈指令   PUSH

一般格式  PUSH  OPRD

源操作数可以是CPU内部的16位通用寄存器、段寄存器(CS除外)和内存操作数(所有寻址方式)。入栈操作对象必须是16位数。

功  能  将数据压入堆栈

执行步骤为:SP=SP-2;[SP]=操作数低8位;[SP+1]= 操作数高8位

【例如】 PUSH  BX

执行过程为:SP=SP-1,[SP]=BH;SP=SP-1,[SP]=BL,如下图所示。

(2) 出栈指令POP

一般格式  POP  OPRD

功   能   将数据弹出堆栈

对指令执行的要求同入栈指令。

【例如】  POP   AX                                

POP   [BX]                          

POP   DS

3.交换指令  XCHG

一般格式  XCHG OPRD1,OPRD2

功 能   完成数据交换

这是―条交换指令,把一个字节或一个字的源操作数与目的操作数相交换。交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。

【例如】 XCHG AL,CL

XCHG  AX,DI

XCHG  BX,SI

XCHG  AX,BUFFER

XCHG  DATA[SI],DH

4.累加器专用传送指令

有三种,输入、输出和查表指令。前两种又称为输入输出指令。

(1) IN 指令

一般格式

IN   AL,n   ; B   AL←[n]

IN   AX,n   ; W  AX←[n+1][n]

IN   AL,DX  ; B  AL←[DX]

IN   AX,DX ; W  AX←[DX+1][DX]

功能  从I/O端口输入数据至AL或AX。

输入指令允许把一个字节或一个字由一个输入端口传送到AL或AX中。若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。

(2) OUT 指令

一般格式   OUT  n,AL  ;   B    AL→[n]

OUT  n,AX  ;   W   AX→[n+1][n]

OUT  DX,AL ;  B    AL→[DX]

OUT  DX,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  ……

IN  AL,1                第9个字符   AAH    

XLAT ;查表                                   

OUT  1,AL  ;(AL)= AAH       表长度256  

本指令可用在数制转换、函数表查表、代码转换等场合。






标签:

相关内容推荐: