微机原理(三)

版权声明:转载请标明来处,谢谢! https://blog.csdn.net/qq_41600080/article/details/84590185

第三章 指令系统与数据指令

1.指令系统基本概念

(1)指令与指令系统

指令:控制计算机完成某种操作的命令;
指令系统:处理器所能识别的所有指令的集合;
指令的兼容性:同一系列的指令都是兼容的;

(2)指令格式

操作码 [操作数] [操作数]
操作指令 目标操作数 源操作数
执行何种操作 指令执行的对象
  • 零操作数指令: 操作码
  • 单操作数指令: 操作码 操作数
  • 双操作数指令: 操作码 操作数,操作数
  • 多操作数指令: 三操作数及以上

(3)指令中的操作数

1、立即数操作数

  • 立即数本身是参加操作的数据,可以是8位或16位,只能作为源操作数。

  • 例:

    • MOV AX,1234H
    • MOV BL,22H

立即数无法作为目标操作数
立即数可以是无符号或带符合数,数值符合其取值范围。

2、寄存器操作数

  • 参加运算的数存放在指令给出的寄存器中,可以是16位或8位。

  • 例:

    • MOV AX,BX
    • MOV DL,CH

存储器操作数

  • 参加运算的数存放在存储器的某一个或某两个单元中
  • 表现形式:[ ]
    [ ]里放操作数在内存中的偏移地址
    指令的操作数出现【 】,表示要寻址的数在内存中。
    在这里插入图片描述
    注意上图:当目标操作数为AL时,只取了一个单元的数,而当目的操作数为AX时,取了两个单元的数。
    在这里插入图片描述

2.指令的寻址方式

操作数可能的来源或运算结果可能的去处:

  • 由指令指令直接给出
  • 寄存器
  • 内存单元

寻址操作数的、所在地址的方法可以有三种大类型

  • 指令直接给出的方式
  • 存放于寄存器中的寻址方式
  • 存放于存储器中的寻址方式

立即寻址

  • 立即寻址仅适合于源操作数,即源操作数是参加操作的数据本身。
  • 由指令直接给出运算的数据(操作数是立即数)。为常数形式或字符形式。
  • 立即数只表示运算的数据,无地址含义。

寄存器寻址

  • 参加操作的操作数在CPU的通用寄存器中
  • 例:在这里插入图片描述
  • 此种寻址方式中的寄存器主要是通用寄存器,不含控制寄存器,段寄存器限制使用。

存储器操作数

  • 指令操作的对象在内存中,表现形式为:[ ]
  • 指令中给出运算对象在内存某个逻辑段中的偏移地址:[偏移地址]
  • 逻辑段的段基地址通过默认或重设方式给出。
  • 存储器操作数的字长本身不确定,其字长取决于指令中另一个寄存器操作数,或通过其他方式指定字长。
1、直接寻址
  • 指令中直接给出操作数的偏移地址

  • 例:MOV AX,[1200H]

  • 直接寻址方式下,操作数默认为在数据段,但允许段重设,即由指令给出所在逻辑段。

  • 例:MOV AX,ES:[1200H] ;ES为段重设符。

2、寄存器间接寻址

  • 操作数存放在内存中,数据在内存中的偏移地址为方括号中通用寄存器的内容。
  • 仅有4个通用寄存器可用于存放数据的偏移地址(间接寄存器——>BX,BP,SI,DI)
  • 间接寻址的一般格式:[ 间址寄存器 ]
    在这里插入图片描述
    寄存器间接寻址
  • 由寄存器间接给出操作数的偏移地址;
  • 存放偏移地址的寄存器称为间址寄存器(BX,BP,SI,DI)
  • 操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:
  • BX,SI,DI——>默认在数据段
  • BP——>默认在堆栈段
  • 也可以段重设

3.寄存器相对寻址

在这里插入图片描述

4、基址、变址寻址

  • 操作数的偏移地址为:一个基址寄存器的内容+一个变址寄存器的内容;

  • 操作数的段地址由选择的基址寄存器决定

    • 基址寄存器为BX,默认在数据段
    • 基址寄存器为BP,默认在堆栈段
  • 基址变址寻址方式与相对寻址方式一样,主要用于一维数组操作。

  • 例:在这里插入图片描述

5、基址、变址、相对寻址

  • 操作数的偏移地址为:基址寄存器内容+变址寄存器内容+位移量
  • 操作数的段地址由选择的基址寄存器决定。
  • 基址变址相对寻址方式主要用于二维表格操作。
    在这里插入图片描述

隐含寻址

  • 指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。
  • 例:MUL BL
  • 指令执行:AL*BL——>AX
    在这里插入图片描述
    在这里插入图片描述

数据传送指令

8086指令系统

从功能上包括六大类:

  • 数据传送
  • 算术运算
  • 逻辑运算和移位
  • 串操作
  • 程序控制
  • 处理器控制

数据传送类指令

  1. 通用数据传送指令
  2. 输入输出指令
  3. 地址传送指令
  4. 标志传送指令

除标志传送指令外,其他指令的执行对标志位不产生影响。

一、通用数据传送指令

1、一般数据传送指令

  • 一般传送指令MOV
  • 格式:MOV dest,src
  • 操作:src——> dest
  • 例:MOV AL,BL

注意点

  • 两操作数字长必须相同;
  • 两操作数不允许同时为存储器操作数;
  • 两操作数不允许同时为段寄存器;
  • 在源操作数是立即数时,目标操作数不能是段寄存器;
  • IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现;在这里插入图片描述

一般数据传送指令应用例

  • 将(*)的ASCLL码2AH送入内存数据段1000H开始的100个单元中。

  • 题目分析:

    • 确定首地址
    • 确定数据长度
    • 写一次数据
    • 修改单元地址
    • 修改长度值
    • 判断写完否?
    • 未完继续写入,否则结束
		MOV  DI,1000H
		MOV  CX,64H		;循环100次
		MOV  AL,2AH
AGAIN: 	MOV  [DI],AL
		INC  DI				;DI+1
		DEC CX				;CX-1
		JNZ  AGAIN			;CX!=0则继续
		HLT

2、堆栈操作指令

堆栈操作的原则

  • 先进后出
  • 以字为单位

堆栈操作指令

  • 压栈指令:PUSH OPRD(16位寄存器或存储器两单元)
  • 出栈指令:POP OPRD

压栈指令PUSH

指令执行过程:

  • SP-2——>SP
  • 操作数高字节——>SP+1
  • 操作数低字节——>SP

出栈指令POP

指令执行过程:

  • SP——>操作数低字节
  • SP+1——>操作数高字节
  • SP<——SP+2

堆栈操作指令说明

  • 指令的操作数必须是16位;
  • 操作数可以是寄存器或存储器两单元,但不能是立即数;
  • 不能从栈顶弹出一个字给CS;
  • PUSH和POP指令在程序中一般成对出现;
  • PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。

3、交换指令

  • 格式:XCHG REG, MEM/REG

  • 注:

    • 两操作数必须有一个是寄存器操作数。
    • 不允许使用段寄存器。
    • XCHG AX,BX
    • XCHG [2000],CL

4、查表指令(了解即可)

  • 格式:XLAT
  • 说明:用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址。
  • 操作:将BX+AL所指单元的内容送AL。

5、字节扩展指令

  • 将符号数的符号位扩展到高位;
  • 指令为零操作数指令,采用隐含寻址,隐含的操作数为 AX及AX,DX。
  • 无符号数的扩展规则为在高位补0。
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41600080/article/details/84590185