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

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  

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






标签:

相关内容推荐: