• 微机原理之 80X86指令系统


    计算机是通过执行指令序列来完成用户的特定任务的,因此每种计算机都有一组指令集供用户使用,这组指令集就称为计算机的指令系统。

    主要内容:
    1、8086/8088指令格式
    2、8086/8088指令系统的寻址方式
    3、8086/8088指令系统

    重点:
    - 8086指令格式和寻址方式(也是考点)
    - 数据传送、算术运算、位操作、串操作、控制转移以及处理器控制等六大类指令

    1. 8086指令格式

      计算机是通过执行指令来处理各种数据的,因此,一条指令即要指出如何处理数据,同时还应指出数据的来源、操作结果的去向。一般来说指令是由操作码、寻址方,操作数组成。

    1.1操作数的分类:

    • 1.源操作数:只能读取的操作数。
    • 2.目的操作数:即可读取又可写入(存放操作结果)的操作数。

      ADD          AX   ,               BX
      操作码      目的操作数            源操作数
      

      还可以分为:

    • 1.数据操作数
    • 2.地址操作数

    1.1.1 数据操作数

      这类操作数是与数据有关的操作数,即指令中要操作的对象是数据。数据操作数又可分为立即数操作数、寄存器操作数、存储器操作数和I/O操作数。

        立即数操作数: 指令中要操作的数据在指令中 
        寄存器操作数: 指令中要操作的数据存放在指定的寄存器中。
        存储器操作数: 指令中要操作的数据存放在指定的存储器中。
        I/O操作数  : 指令中要操作的数据来自或送到I/O端口。
    

    1.1.2 地址操作数

      这类操作数是与程序转移地址有关的操作数,即指令中要操作的对象不是数据,而是要转移的目的地址。
      地址操作数也可分为立即数操作数、寄存器操作数和存储器操作数,即要转移的目的地址包含在指令中,或存放在寄存器中,或存放在存储器单元之中

    2. 8086/8088的寻址方式(重点)

      所谓寻址方式就是寻找操作数存放地址(位置)的方法。在8086/8088系统中,操作数又可分为两大类:数据操作数和地址操作数。因此,寻址方式也分为数据寻址方式和地址寻址方式两大类。

    2.1 数据寻址方式

    1)立即数寻址方式
    

    例如:MOV AL, 80H MOV AX, 1234H
      这里写图片描述

    2)寄存器寻址方式
    

    例如:MOV AX, CX

    3)存储器寻址方式
    

      存储器寻址方式的操作数存放在存储器单元中。因此,要存取操作数就必须知道其存储器的单元地址。在指令中可以直接给出或间接给出操作数的地址,以达到存取操作数的目的。
      指令中给出的地址只是操作数的有效地址(EA),若要从存储器中存取操作数还须得到实际的地址(物理地址)。物理地址=段基址左移四位+有效地址
       这里写图片描述
    有效地址可以由以下三种地址分量组成:
    ● 位移量(Displacement):它是存放在指令中的一个8位或16位的数,但它不是立即数,而是一个地址。
    ● 基址(Base Address):它是存放在基址寄存器BX或BP中的内容。
    ● 变址(Index Addess):它是存放在变址寄存器SI或DI中的内容。
    1. 直接寻址方式 : MOV AL, [1064] ( 段超越 ES:[1064H] )
    2. 寄存器间接寻址 :MOV AX, [SI]
    3. 寄存器相对寻址:MOV CL, [BX+1064H]
    4. 基址加变址寻址方式
    这里写图片描述
    5. 基址加变址相对寻址:MOV [BX+DI+1234H], AH
    这里写图片描述

    I/O端口寻址方式

    1. 直接端口寻址方式:IN AL, 21H
    2. 间接端口寻址方式:OUT DX, AL

    2.2 地址的寻址方式

      地址的寻址方式其实是程序转移地址的寻址方式,也就是找出程序转移的地址号,而不是操作数。
      转移地址可以在段内,也可以跨段转移(称段间转移)。寻求转移地址的方法有以下四种:
    1. 段内直接寻址:
    2. 段内间接寻址方式:
    3. 段间直接寻址方式:
    4. 段间间接寻址方式:

    练习题:
    指出下列指令中源操作数的寻址方式,若为储存器寻址方式,写出其逻辑地址:
    1. mov bx,2000h 立即数寻址
    2. mov bx,[si] 寄存器间接寻址
    2. add ax, [bx+si+10h] 基址加变址相对寻址
    3. mov ax, data 段内直接寻址(有疑问??)
    3. in al,dx io端口间接寻址
    4. mov bx, offset var

    3.8086/8088指令系统

    1.数据传送类指令

      实现CPU中的寄存器与存储器或I/O端口之间原始数据、中间结果、最终结果以及其他有关信息的传送。它可分为以下四组:

    • 通用数据传送指令:MOV PUSH POP XCHG XLAT
    • 输入输出指令:IN OUT
    • 地址传送指令:LEA LDS LES
    • 标志传送指令:LAHF SAHF PUSHF POPF

    (一)通用数据传送指令

    mov 指令
    push/pop  src  ; sp-2 ,16位操作数,但不能是立即数
    XCHG opr1,opr2 ; 可实现寄存器与寄存器之间,寄存器与存储器之间进行数据交换;
                     注意段寄存器的内容不能参加交换!
    

    (二) 输入/输出指令IN / OUT(直接与间接)

    (三)目标地址传送指令

      LEA  reg16,  mem
    

      此指令的功能是将存放源操作数的16位偏移地址(即有效地址EA)送到一个16位的通用寄存器中。即源操作数必须是一个存储器操作数,目的操作数必须是一个寄存器操作数

    2.算术运算类指令

      8086/8088的算术运算指令共20条,除符号扩展指令(CBW,CWD)外,其余指令都影响状态标志位。

    CMP dst, src    (dst) - (src)  ;前减后
    
    指令类型 指令格式 操作功能
    AAA 非压缩型BCD码加法调整指令
    十进制调整指令 DAA 压缩型BCD码加法调整指令
    AAS 非压缩型BCD码减法调整指令
    DAS 压缩型BCD码减法调整指令
    AAM 非压缩型BCD码乘法调整指令
    AAD 非压缩型BCD码除法调整指令

    3.位操作指令

    1. 逻辑运算指令:

      AND  OR  NOT    XOR TEST
      
    2. 移位指令:

         SHL  SAL SHR SAR
      
    3. 循环移位指令:

          ROL ROR RCL RCR
      

      需要用到时查询该指令即可 !!!

    4.字符串指令(略)

    5.控制转移类指令(重点指令)

    能够使程序的执行流程发生改变的指令。共有以下四类指令:

    1. 无条件转移 —JMP 转移地址
    2. 条件转移 —JCC 转移地址
    3. 循环—loop,loope,loopne等
    4. 子程序调用—call, ret

    1. JMP 不用讲

    2. 条件转移

    ⑴ 判断单个标志

            ZF: JZ(JE), JNZ(JNE)
            SF: JS, JNS
            OF: JO, JNO
            PF: JP, JNP
            CF: JC, JNC
    

    (2) 判断CX寄存器

        JCXZ :  CX=0
    

    3.循环

    LOOP 循环
    

    判断CX是否等于零,不等于零则循环

    4. 子程序调用

    • CALL 子程序调用指令
      用法:CALL dst
      说明:由编译程序自动匹配为某种寻址方式
    • RET 子程序返回指令
      用法:RET

    6. 处理器控制类指令(略)

  • 相关阅读:
    图像分割学习笔记_1(opencv自带meanshift分割例子)
    基础学习笔记之opencv(10):Mat mask操作
    Qt学习之路_6(Qt局域网聊天软件)
    Qt学习之路_8(Qt中与文件目录相关操作)
    Android开发历程_6(RadioButton和CheckBox的使用)
    Qt学习之路_4(Qt UDP的初步使用)
    目标跟踪学习笔记_4(particle filter初探3)
    Reading papers_11(读Integrating local action elements for action analysis相关文章)
    基础学习笔记之opencv(8):Mat 基本图像容器
    基础学习笔记之opencv(14):随机数发生器&绘制文字
  • 原文地址:https://www.cnblogs.com/Tattoo-Welkin/p/10335280.html
Copyright © 2020-2023  润新知