版权声明:版权声明:转载必须注明本文转自StathamJ的博客:https://blog.csdn.net/qq_41664447 https://blog.csdn.net/qq_41664447/article/details/82692143
2.1.1 Intel 8086 CPU内部结构
- 功能上,包括运算器和控制器两大部件
- 运算器:负责所拥有的算术逻辑
- 控制器:负责维系系统的所有控制功能
- 结构上,包括执行单元EU和总线接口单元BIU两个模块
- 执行单元EU:包括指令译码部件、ALU和通用寄存器组,负责指令译码和执行
- 总线接口单BIU:包括总线控制逻辑和专用的寄存器,负责CPU与外界的通信联络
1.执行部件EU(Execution Unit)
- 功能
- 负责所有指令的译码和执行
- (1)获取指令代码,译码后产生控制信号
- (2)进行算术和逻辑运算,并根据运算结果修改标志寄存器状态位状态
- (3)位BIU提供需要传送的数据和16位有效地址
- 组成
- 寄存器组
- 算术逻辑单元ALU
- EU控制部件
算术逻辑单元ALU
- 16位的运算器,负责所有的指令执行期间的运算
- 算术运算:加、减、乘、除
- 逻辑运算:与、或、非、异或
- 8086CPU的ALU可完成8位、16位数据的运算
- 计算指令执行时所需要的存储单元的有效地址
- 针对相对寻址、基址加变址寻址、相对基址加变址寻址,这三种寻址方式而言
EU控制部件
- 功能
- 负责从BIU的指令列队中取出指令
- 对指令操作码进行译码分析
- 按照工作时序向相关的部件发送相应的控制信号
- 组成
- 指令寄存器、指令译码器
- 时序控制部件
- 微操作控制部件
2.总线接口部件BIU(Bus Interface Unit)
- 功能
- 负责CPU所有的访问操作
- 段式方式访问主存;直接译码的方式访问I/O端口
- (1)从主存中读取指令
- (2)计算并形成所要访问主存的物理地址
- (3)访问主存、访问I/O,以获取数据或保存结果
- 负责CPU所有的访问操作
- 组成
- 段寄存器和指令指针寄存器等
- 地址加法器
- 指令队列缓冲器
- 总线控制逻辑
指令队列缓冲器
- 功能
- 存放预取的指令,共6字节容量
- 8088CPU的指令列队缓冲器为4字节容量
- 使用规则
- 先进先出,按顺序送入EU执行
- 提供EU执行的所有指令
- 工作过程
- 顺序执行程序时,有空闲即自动取指
- 程序发生转移时,清除缓冲器内容,重新获取指令
总结:分段管理模式下的访存
- CPU要访问存储器必须提供物理地址
- 一般使用段寄存器与指针寄存器来共同表示逻辑地址
- 在CPU内部由地址加法器完成运算,转换成物理地址输出访问主存储器
- 代码段段寄存器CS——指针寄存器为IP
- 数据段段寄存器DS——指针寄存器一般用BX、SI、DI
- 附加段段寄存器ES——指针寄存器一般用DI(字符串操作)
- 堆栈段段寄存器SS——指针寄存器SP指向栈顶,指针寄存器BP指向栈内任意位置
地址加法器
- 功能
- 形成16位系统的20位主存地址
- 取指令
- PA=(CS)*16+IP
- 取数据
- PA=(DS/SS/ES)*16+有效地址
- 访问I/O端口时不需进行运算
指针寄存器
- 指针寄存器
- 其值可作为存储单元地址,用于指令或CPU内部执行时寻址使用的寄存器
- 其值改变,所寻址到得存储单元也会不同,因此形象地称之为指针
- 汇编语言程序中,凡是和地址有关的都可以认为是指针
- 寄存器、立即数、变量、标号…
- 能够标示一个存储单元地址,用于寻址
2.1.2 Intel 8086内部寄存器
- CPU中为什么要使用寄存器
- 寄存器比存储器存取速度快
- 使用灵活(如暂存运算中的中间数据)、控制方便(如IP)
- 寄存器的分类
- 通用寄存器:传送和暂存数据;参与算术逻辑运算并保存运算结果
- 段寄存器:保存段地址,用于寻址时构成物理地址
- 专用寄存器:CPU运行时的辅助工具(编程时用到前两个)
通用寄存器
- 数据寄存器:
- AX累加器:常作隐含操作数,可通用
- BX基地址寄存器:常作地址指针,可通用
- CX计数器:常存放计数值,可通用
- DX数据寄存器:常与累加器配合,可通用
- 变址寄存器:
- SI源变址寄存器:保存源操作数地址
- DI目的变址寄存器:保存目的操作数地址
- 堆栈指针寄存器:
- SP栈顶指针:只能保存堆栈栈顶地址
- BP堆栈指针:可保存堆栈任意位置地址
累加器AX
- 16位寄存器可以存储2个字节的数据;
- 例如:数值2008H存放于AX累加器中。
- AX可分做两个8位寄存器使用,分别为AH和AL。
- 例如:(AX)=2008H,则(AH)=20H,(AL)=08H;
- BX、CX、DX类似。
数据寄存器AX,BX,CX和DX
- 16位寄存器
- 高低8位可分为两个独立寄存器使用;
- 主要用于暂存指令执行过程中的数据;
- 特殊用途:
- AX:累加器,ALU运算核心部件、某些指令的默认寄存器;
- BX:基址寄存器,存放存储单元的有效地址;
- CX:计数器,串操作指令和循环指令中的默认计数器;
- DX:与AX合用保存32位数据;I/O指令中存放端口地址。
变址寄存器SI、DI
- 16位寄存器:
- 常作为指针,存放存储单元有效地址,也可暂存数据;
- 特殊用法:
- SI、DI中保存的地址信息可以随着指令的执行而自动改变;
- SI:源变址寄存器,串操作中存放源串地址,默认DS段;
- DI:目的变址寄存器,串操作中存放目的串地址,默认ES段;
- 该特殊用法只在字符串操作中有效,其他场合下作一般的指针寄存器使用。
堆栈指针寄存器SP 、BP
- 堆栈是一个先进后出的数据结构,栈底位置不变;
- 栈顶指针SP
- 其中始终存放栈顶单元的有效地址;
- 其值是由出入栈指令自动更改的,一般不允许随意对该寄存器赋值;
- 堆栈指针BP
- 其中数据一般作为地址进行访存;
- 默认对应于SS段,可寻址堆栈中的任何单元。
段寄存器(16位)
- CS:代码段段寄存器;存放代码段段地址
- DS:数据段段寄存器;存放数据段段地址
- ES:附加段段寄存器;存放附加段段地址
- SS;堆栈段段寄存器;存放堆栈段段地址
- 一段汇编语言程序至少有一个逻辑段——代码段,用于存放代码;
- 一段汇编语言程序最多有4个逻辑段——1个代码段,3个数据段,分别用于存放代码和数据;
CS(Code Segment)
- 代码段
- 用来存放要执行的指令序列
- 段首地址用代码段寄存器CS来保存
- 指令指针寄存器IP指示本段中的地址;
- 将要执行的下条指令的有效地址;
- CPU利用CS:IP形成存储单元的物理地址,以获取下条要执行指令的代码。
DS(Data Segment)
- 数据段
- 用来存放程序运行所需要的数据;
- 段首地址用数据段寄存器DS来保存;
- CPU利用DS:EA形成存储单元的物理地址,以获取数据段中的数据;
- EA的形成方式详见第3章寻址方式的介绍。
ES(Extra Segment)
- 附加段
- 即附加的数据段,保存程序运行所需要的数据;
- 段首地址用附加段寄存器ES来保存;
- CPU利用ES:EA形成存储单元的物理地址,以获取附加段中的数据;
- 串操作指令常将附加段ES作为目的操作数的存放区域。
SS(Stack Segment)
- 堆栈
- 用于存储程序运行中需要临时保护的数据;
- 段首地址用堆栈段寄存器SS来保存;
- 堆栈指针寄存器SP保存堆栈栈顶的有效地址;
- CPU利用SS:SP对堆栈栈顶单元进行操作;
- 利用SS:BP对堆栈中的任一单元进行操作。
16位标志寄存器
- 仅用到其中9位,且按位使用;
- 6位状态标志位:反映ALU的执行状态;
- 按照ALU指令执行的结果设置各状态标志位;
- 3位控制标志位:控制CPU的某些功能。
- 6位状态标志位:反映ALU的执行状态;
常用的状态标志位
- 进位标志位CF
- 运算结果有进位或借位时,CF=1,否则CF=0;
- 溢出标志位OF
- 运算结果超出了数据表示范围时,OF=1,否则OF=0;
- 符号标志位SF
- 运算结果为负数时,SF=1,否则SF=0;
- 零标志位ZF
- 运算结果为0时,ZF=1,否则ZF=0。