微型计算机原理-8086/8088指令格式和寻址方式

  • Post author:
  • Post category:其他




一、指令格式

请添加图片描述



1.第一个字节为?包含什么参数,代表什么意思?

第一个字节为操作码

包含的参数为:

  • OPCODE :占六位,给出要执行的操作。

    比如 100010 代表MOV指令
  • D :占一位,给出

    REG操作数

    的传送方向,如果为0,说明REG操作数是源操作数,为1则是目标操作数
  • W:占一位,给出操作的数是字节(8bit)还是字(16bit),如果W=0,则代表操作数类型为字节,W=1则表示操作数类型为字



2.第二个字节为?包含什么参数,代表什么意思?

第二个字节为寻址方式

包含的参数:

  • MOD:占两位,区分另一个操作数是在寄存器种还是存储器中,如果是存储器中还需给出偏移地址
  • REG:占三位,是一个寄存器操作数,代表源操作数还是目标操作数

    由D给出
  • R/M: 占三位,与MOD有关,如果MOD代表寄存器寻址,则给出所在寄存器的编号,如果MOD代表存储器寻址,则给出计算偏移地址的方式。
    请添加图片描述

    注意:8086/8088 的指令

    由1~6个字节

    给出,只有一个字节也是可以的,因为很多指令的操作数是隐含的,不用自己去指定。



来个题:


写出 MOV AH,[BX+DI+50H] 的指令码

MOV的

OPCODE为:100010


令REG存目标操作数,

D=1

,(令D=0,存源操作数也行)

目标操作数为AH,根据上表得

REG=100


因为已知目标操作数是八位,所以操作数类型为字节,

W=0



因为位移量为50H,没超过2^8,是八位位移,根据上表中寄存器寻址有八位位移得

MOD=01


根据上表找到[BX +DI +八位偏移量]对应的

R/M=001


偏移量为:

50H=01010000


由此得操作码:100010 1 0 01 100 011 01010000

即 8A6150H



二、寻址方式 (很重要很重要很重要!!)



▶ 预备知识:操作数的种类

请添加图片描述

根据操作数的个数,指令格式可分为以下几种:

  1. 零操作数指令

    指令格式中没有操作数或操作数是隐含约定的。
  2. 一操作数指令

    指令格式中有一个操作数,或还有一个隐含的操作数(实际上是双操作数)。
  3. 二操作数指令

指令中有两个操作数,其中一个为目的操作数,另一个为源操作数。


源操作数

:只能读取的操作数。


目的操作数

:即可读取又可写入(存放操作结果)的操作数。

操作数又可分为两大类:数据操作数和地址操作数。

1.数据操作数

这类操作数是与数据有关的操作数,即

指令中要操作的对象是数据

。数据操作数又可分为立即数操作数、寄存器操作数、存储器操作数和I/O操作数。

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

      这类操作数是与程序转移地址有关的操作数,即指令中要操作的对象不是数据,而是要转移的目的地址。

      地址操作数也可分为立即数操作数、寄存器操作数和存储器操作数,即要转移的目的地址包含在指令中,或存放在寄存器中,或存放在存储器单元之中。



▶ 数据寻址方式(8种)



1. 立即数方式

操作数包含在指令字节中。即指令格式中操作数部分就是操作数本身。



2. 寄存器寻址方式

操作数存放在CPU的某个内部寄存器中



3. 存储器寻址方式

操作数存储器中



1) 直接寻址方式


操作数的有效地址只包含位移量,不是立即数,是地址!


如果没有特殊指明,直接寻址方式的操作数一般在存储器的数据段中,即

隐含的段寄存器是DS

。但是8086/8088也允许段超越,此时需要在指令中特别标明,方法是在有关操作数的前面写上操作数所在段的段寄存器名,再加上冒号。

请添加图片描述



2) 寄存器间接寻址方式

操作数的有效地址只包含基址寄存器BX的内容或变址寄存器SI、DI内容的一种。注意操作数是在存储器中的,但是在存储器中的位置放在了寄存器中

例:MOV AX,[SI]

注意:

【】中只允许出现BX、SI、DI其中的一个



3) 寄存器相对寻址方式

在寄存器间接寻址的基础上加了一个

八位或者十六位

的位移量,并且多了个可用的寄存器BP

例:MOV [SI+10H],AX

注意:

【】中只允许出现BX,BP,SI,DI中的一个




4) 基址变址寻址方式

有效地址是

一个基址寄存器(BX或BP)和一个变址寄存器(SI和DI)的内容之和


例子:MOV [BX+DI],AX

注意:【】中只允许出现

BX和BP中的一个+SI和DI中的一个



5) 基址变址相对寻址方式

在基址变址寻址方式上加一个八位或十六位的位移量

例子:MOV AX,[DX+SI+1234H]




4. 端口寻方式



1) 端口直接寻址

操作数为八位即**不超过255(FFH)**可以直接给出



2)端口间接寻址

如果端口地址超过255则

必须现存入DX



▶ 地址寻址方式(4种)

地址的寻址方式其时是程序转移地址的寻址方式,也就是

找出程序转移的地址号,而不是操作数



转移地址可以在段内,也可以跨段转移(称段间转移)。



1. 段内直接寻址方式

转移的地址是当前IP内容和指令规定的8位或16位位移量

之和



  • 当位移量是8位时,称为短程转移
  • 位移量是16位时称为近程转移。

    这种寻址方式适用于条件转移或无条件转移类指令。但条件转移只有8位位移量的短程转移。



2. 段内间接寻址方式

程序转移的地址存放在

寄存器



存储器单元

中。指令执行使用寄存器或存储器单元的内容来更新IP的内容。



3. 段间直接寻址方式

这种寻址方式是指令码中

直接给出16位的段地址和16位的偏移地址

用来更新当前的

CS和IP

内容。



4. 段间间接寻址方式

这种寻址方式是由指令码的寻址方式

求出存放转移地址的连续两个字的地址

。其

低位字地址单元中存放的是偏移地址



高位字地址单元中存放的是转移段基址。




版权声明:本文为qq_28256699原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。