8086指令集结构

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086指令集结构

一.8086 的寄存器结构

8086CPU中具有14个程序员可以访问的16位寄存器(如图1.1所示),按其功能可分为通用寄存器、段寄存器、指令指针寄存器及标志寄存器。

图1.1 8086寄存器结构框图

(1) 通用寄存器

8086CPU共有8个16位寄存器,它们可以作为一般的通用寄存器存放数据。按照相应的用途又可以分为两组:一组是数据寄存器(AX,BX,CX,DX),可以按照字(16位)形式访问,也可按照字节(8位)形式访问。主要用来暂时存放在计算过程中需要用到的操作数、操作运算结果。另一组是地址指针寄存器(SP,BP,SI,DI),只能按照字形式访问。主要存放访问主存时所需的偏移地址。

AX(Accumulator) 称作累加器,在乘、除法等指令运算中指定存放操作数及运算结果。

BX(Base) 称作基址寄存器,在计算主存地址时可以用作基址寄存器。

CX(Count) 称作计数寄存器,在循环指令及串处理等指令中作为隐含的计数器使用。

DX(Data) 称作数据寄存器,在字(16位)乘、除法等指令中用于存放双倍字长结果的高16位数据;在I/O指令中存放I/O的端口地址。

以上四个16位寄存器均可分为两个独立的8位寄存器使用。如AX分为AH 和AL

SP(Stack Pointer) 称作堆栈指针寄存器,存放堆栈段首地址到栈顶单元的偏移量。

BP(Base Pointer) 称作基址指针寄存器,通常用于存放需要访问的、位于堆栈段数据的一个基地址或该段的某个字单元到堆栈段首地址的偏移量。

SI(Source Index) 称作源变址寄存器,主要用于存放需要访问的(源)操作数所在主存单元相对于该段首地址的偏移量。在串操作指令中,用作隐含的源变

址寄存器。

DI(Destination Index) 称作目的变址寄存器,主要用于存放需要访问的(目的)操作数所在主存单元相对于该段首地址的偏移量。在串操作指令中,用作隐含的目的变址寄存器。

(2) 段寄存器

8086支持访问最多1MB的主存空间,主存按段结构进行管理,在主存中存放的段的类型一共有4种(代码段、数据段、附加段、堆栈段)。主存地址的表示形式为:段寄存器:段内偏移。

CS(Code Segment) 称作代码段寄存器,指定当前正在运行的代码段。

DS(Data Segment) 称作数据段寄存器,指定当前访问的数据段。

EX(Extra Segment) 称作附加段寄存器,指定当前的附加段。附加段主要为当前运行程序所处理的存储器操作数提供所需的辅助存储空间。

SS(Stack Segment) 称作堆栈段寄存器,指定当前的堆栈段,堆栈段可以根据需要在其中存放暂存的各种数据。

(3) 指令指针寄存器

IP(Instruction Pointer) 是一个16位的专业寄存器,存放需要访问的指令在代码段中的偏移量(类似于通常所说的程序计数器PC)。多数情况下,CS:IP 指向下一条即将执行的指令地址。

(4)标志寄存器

8086CPU中设置了一个16位的标志寄存器FLAGS,但只有其中的9位有效,每一位指示机器当前的某个状态特征或控制信息。包括6位状态标志位和3位控制标志位。

a)状态标志位

状态标志位主要由CPU根据指令执行的结果自动设置。这些标志位通常作为某个条件转移指令的测试条件。

CF(Carry Flag) 进位标志,记录运算时最高位产生的进位。

PF(Parity Flag) 奇偶标志,反映操作结果的低8位中1的个数,如果1的个数为偶数,则PF置1,否则PF置0。PF主要用来检测在机器中传送信息时是否出错。

AF(Auxiliary Carry Flag) 辅助进位标志,记录运算结果的第3位(即低半字节)向高位(第4位)产生的进位或借位。该标志通常用于十进制算术运算的调整。

ZF(Zero Flag) 零标志,运算结果为零,则ZF置1,否则置0。

SF(Sign Flag) 符号标志,记录运算结果的符号,若非负则置0,否则置1。

OF(Overflow Flag) 溢出标志,反应带符号数的运算结果是否超出机器所能表示的数值范围,超出该范围则为溢出,OF置1,否则置0。

b)控制标志位

控制标志位主要用于串操作方向的控制、中断的屏蔽以及程序的调试。

TF(Trap Flag) 陷阱标志,也可称为单步标志或跟踪标志,用于程序的调试。当TF为1,CPU执行完一条指令后便产生单步中断,然后转去执行单步中断服务程序。

IF(Interrupt Flag) 中断标志,或称为中断允许标志。当IF置1则允许CPU 响应中断请求,当IF置0,则禁止CPU响应可屏蔽中断请求。

DF(Direction Flag) 方向标志,用于串操作指令,控制串的处理方向。当

DF置1时,每执行一步串操作,地址指针寄存器SI和DI的内容自动递减,以指向下一步串操作的地址。当DF置0时,SI和DI内容自动递增。

二.8086的寻址方式

2.1 与数据相关的寻址方式

(1)立即寻址方式

指令中所需要的操作数直接存放在本条指令代码的立即数字段中,操作数作为指令的一部分存放在代码段中,当把指令取出时,操作数已经被一起取到CPU 的指令队列中,指令执行时不需要再去主存或寄存器中读取该操作数。

示例:

MOV AL ,23H

该条指令经过汇编后,操作数23H被存放在指令的操作数字段中。随着取指操作一起被读入CPU。

(2) 寄存器寻址方式

指令中所需要的操作数存放在CPU的某个寄存器中,指令的地址码部分给出寄存器地址(或称作寄存器号)。寄存器可以使用16位也可以使用8位寄存器。

示例:

MOV AL,BH

该指令的源操作数BH和目的操作数AL均为寄存器寻址方式,而MOV AL,23H的目的操作数AL为寄存器寻址方式,源操作数23H为立即寻址方式。

(3) 直接寻址

直接寻址方式也称为存储器直接寻址方式。指令中的操作数字段直接指出操作数所在的内存地址。

示例:

MOV AX,DS:[1200H]

该指令的源操作数为DS:[1200H]所指向的内存单元中的16位数据。指令功能是把主存中当前数据段偏移1200H字节处的字单元内容传送到通用寄存器AX中。

(4) 寄存器间接寻址方式

指令中所需要的操作数存放在主存的某个单元中,而操作数的有效地址EA存放在某个作为地址寄存器的4个通用寄存器BX、BP、SI或DI中。若以BX、SI 或DI作为间址寄存器,则默认段为数据段,即DS指向的段。如果以BP作为间址寄存器,则默认段为堆栈段,即SS指向的段。

示例:

MOV AX,[BX]

该指令的源操作数为DS:BX所指向的内存单元中的16位数据。

(5) 变址寻址方式

指令中所需要的操作数存放于主存的某个单元中,指令的地址码部分给出构成操作数有效地址EA的位移量部分和4个通用寄存器BX、BP、SI或DI之一的寄存器地址。这里默认段的指定同寄存器间接寻址。

示例:

MOV AX,20H[BX]

该指令的源操作数为DS:[BX]+20H所指向的内存单元中的16位数据。指令功能把主存中当前数据段偏移BX寄存器内容加20H处字单元内容传送到通用寄存

相关文档
最新文档