目录
一、工作原理
1、总线接口部件(BIU)和执行部件(EU)的协同工作
2、地址转换与寻址
3、指令执行流程
二、特点
1、16 位数据总线和 20 位地址总线
2、并行的指令流水线
3、丰富的寄存器组
4、支持多处理器系统
5、兼容性好
三、寻址方式
1、立即寻址
2、寄存器寻址
3、直接寻址
4、寄存器间接寻址
5、寄存器相对寻址
6、基址变址寻址
7、相对基址变址寻址
一、工作原理
1、总线接口部件(BIU)和执行部件(EU)的协同工作
8086 从功能上分为总线接口部件(BIU)和执行部件(EU)两部分。BIU 负责与存储器、I/O 端口传送数据,包括取指令、读 / 写操作数等操作。EU 负责指令的执行,如对操作数进行算术运算和逻辑运算等。这两个部件可以独立工作,在大多数情况下,取指令操作与执行指令操作可以重叠进行,提高了 CPU 的执行效率。
2、地址转换与寻址
8086 微处理器的地址引脚有 20 根,可直接寻址 1MB 的存储空间,但 CPU 内部用来提供地址信息的寄存器都是 16 位的。因此采用了段结构的内存管理方法,将内存分为代码段、数据段、堆栈段和附加数据段等,通过段寄存器(CS、DS、SS、ES)和指令指针寄存器(IP)等协同工作来实现 20 位物理地址的寻址。物理地址 = 段地址 ×10H + 段内偏移地址。
3、指令执行流程
CPU 总是有规律地重复取指令、指令译码、读取操作数(如果指令需要)、执行指令、写入结果(如果需要)等步骤。8086 通过其内部的结构和机制高效地完成这些步骤,以实现程序的运行
二、特点
1、16 位数据总线和 20 位地址总线
具有 16 位的数据总线,意味着一次可以传输 16 位的数据,这在当时是比较先进的数据处理能力;同时拥有 20 位的地址总线,能够直接寻址 1MB 的内存空间,为程序和数据的存储提供了较大的空间。
2、并行的指令流水线
将指令的执行过程分为取指令和执行指令两个独立的部分,由 BIU 和 EU 分别负责,二者并行工作,减少了 CPU 为取指令而等待的时间,大大提高了程序的运行速度
3、丰富的寄存器组
(1)通用寄存器:包括 AX、BX、CX、DX 等,既可以作 16 位寄存器使用,也可以分成高、低 8 位分别作两个 8 位寄存器使用,为数据的处理和存储提供了灵活的方式。例如,AX 也称累加寄存器,在很多指令中被频繁使用。
(2)段寄存器:有 CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)、ES(附加数据段寄存器),用于管理不同类型的数据段和代码段的地址信息,方便程序对不同类型的数据进行访问和操作。
(3)指针和变址寄存器:如 BP(基数指针寄存器)、SP(堆栈指针寄存器)、SI(源变址寄存器)、DI(目的变址寄存器),在数据的寻址和操作中起到重要作用,特别是在字符串操作、数组操作等场景中。
(4)控制寄存器:IP(指令指针寄存器)用于存放下一条要读取的指令在代码段中的偏移地址,在程序的执行过程中会自动加 1 修正;FLAGS(标志寄存器)用来存放 CPU 运算结果的状态特征和控制标志,如进位标志 CF、溢出标志 OF 等,为程序的判断和控制提供了依据。
4、支持多处理器系统
可以与其他处理器协同工作,构成多处理器系统,提高系统的处理能力和性能。
5、兼容性好
作为 x86 架构的早期产品,为后续的微处理器发展奠定了基础,具有良好的兼容性和扩展性,使得基于 8086 开发的软件和系统能够在后续的处理器上运行或进行升级。
三、寻址方式
1、立即寻址
操作数直接包含在指令中,紧跟在操作码之后,作为指令的一部分,存放在代码段中。立即数可以是 8 位或 16 位的。
例如:MOV AX, 1234H ;将立即数 1234H 送入 AX 寄存器。
2、寄存器寻址
操作数在寄存器中,指令中指定寄存器名。
例如:MOV AX, BX ;将 BX 寄存器中的内容送入 AX 寄存器。
寄存器可以是 8 位的(AH、AL、BH、BL 等)或 16 位的(AX、BX、CX、DX 等)。
3、直接寻址
指令中直接给出操作数的有效地址 EA(Effective Address),操作数在数据段中,段地址默认在 DS 寄存器中。
例如:MOV AX, [2000H] ;将数据段中偏移地址为 2000H 的内存单元的内容送入 AX 寄存器。
如果要访问其他段,可以在指令中用段超越前缀指定段寄存器。
例如:MOV AX, ES:[2000H] ;将附加段中偏移地址为 2000H 的内存单元的内容送入 AX 寄存器。
4、寄存器间接寻址
操作数的有效地址存放在基址寄存器(BX、BP)或变址寄存器(SI、DI)中。如果使用 BX、SI、DI 作为间址寄存器,段地址默认在 DS 中;如果使用 BP 作为间址寄存器,段地址默认在 SS 中。
例如:MOV AX, [BX] ;将数据段中以 BX 内容为偏移地址的内存单元的内容送入 AX 寄存器。
MOV AX, [BP] ;将堆栈段中以 BP 内容为偏移地址的内存单元的内容送入 AX 寄存器。
5、寄存器相对寻址
操作数的有效地址是基址寄存器或变址寄存器的内容加上一个 8 位或 16 位的位移量。如果使用 BX、SI、DI 作为基址寄存器,段地址默认在 DS 中;如果使用 BP 作为基址寄存器,段地址默认在 SS 中。
例如:MOV AX, [BX+1000H] ;将数据段中以 BX 的内容加上 1000H 为偏移地址的内存单元的内容送入 AX 寄存器。
6、基址变址寻址
操作数的有效地址是基址寄存器(BX 或 BP)与变址寄存器(SI 或 DI)的内容之和。如果使用 BX 作为基址寄存器,段地址默认在 DS 中;如果使用 BP 作为基址寄存器,段地址默认在 SS 中。
例如:MOV AX, [BX+SI] ;将数据段中以 BX 和 SI 内容之和为偏移地址的内存单元的内容送入 AX 寄存器。
7、相对基址变址寻址
操作数的有效地址是基址寄存器(BX 或 BP)与变址寄存器(SI 或 DI)的内容之和再加上一个 8 位或 16 位的位移量。如果使用 BX 作为基址寄存器,段地址默认在 DS 中;如果使用 BP 作为基址寄存器,段地址默认在 SS 中。
例如:MOV AX, [BX+SI+1000H] ;将数据段中以 BX 和 SI 内容之和再加上 1000H 为偏移地址的内存单元的内容送入 AX 寄存器。