微机原理与接口技术知识点总结:第二章 CPU结构和指令系统 (上)
2023-12-13 10:22:10
微机原理与接口技术知识点总结:第二章 CPU结构和指令系统 (上)
文章目录
一、8086/8088CPU结构
1.相同点和差异
- 相同点
- 寄存器:16位
- 地址线:20位,存储空间 = 1MB
- 8086: AD0~AD15, A16~A19
- 8088: AD0~AD 7 , A8 ~ A19
- 差异:
- 数据总线:
- 8086: 16位(16位机):AD0 ~ AD15
- 8088: 8位(准16位机):AD0 ~ AD7
- 指令队列(缓冲器)
- 8086: 6字节
- 8088:4字节
- 数据总线:
2.内部结构:EU和BIU
(1)EU(Execute Unit,执行单元)
- EU内部构成
- ALU:执行基本运算和处理.
- 一组通用寄存器 + 标志寄存器
- EU控制系统:队列和时序控制
- EU功能:负责执行指令或运算
- 从指令队列中取指令代码,译码,
在ALU中完成数据的运算,结果的
特征保存在标志寄存器
中。
- 从指令队列中取指令代码,译码,
(2)BIU(Bus Interface Unit,总线接口单元)
- BIU构成
- 四个段寄存器+ 指令指针IP
- 地址加法器:段地扯和偏移地址
相加,形成20位物理地址 - 指令队列缓冲器: 6或4字节
- 总线控制逻辑:内外总线接口
- BIU功能
- 预取指令
- 执行指令的同时预取若干条放在
队列中
- 执行指令的同时预取若干条放在
- 控制指令执行顺序
- 顺序取指令执行
- 执行转移指令清除队列
- 从新地址取指并送往EU
- 形成内存寻址的20位地址
- 预取指令
3.8086/8088流水线工作机制
- 命令的执行过程
- 取指(
取指令
)- 取数(
取操作数
)- 执行(
分析和执行指令
)- 写回(
写结果到存储器
)
- 写回(
- 执行(
- 取数(
- 取指(
- 流水线机制的前提
- EU和BIU可同时工作
- 指令预取队列的存在
二、 8086/8088 CPU寄存器
1.14个基本寄存器
- 8086寄存器组(
均16位
)- 通用寄存器:8个
- 段寄存器:4个
- 标志寄存器:1个
- 指令指针寄存器:1个
2.通用寄存器(8个)
- 通用寄存器(8个,
均16位
)- 数据寄存器(4个)
- AX,BX,CX,DX
- 变址寄存器(2个)
- SI,DI
- 指针寄存器(2个)
- BP,SP
- 数据寄存器(4个)
1. 数据寄存器(4个): AX,BX,CX,DX
暂存运算的输入数据、输出数据和中间数据
- 高8位 | 低8位,可独立寻址和读/写
- 专门用途
- AX:累加器(Accumulator):暂存运算结果及外设数据
- BX:基址寄存器(Base address Register):存放内存地址
- CX:计数器(Counter):循环和串操作的隐含计数器
- DX:数据寄存器(Data Register):双字高16位或外设地址
例子1:BX作为基址寄存器(存放内存地址)
- MOV [BX], 1000
- BX中的数据是偏移地址EA(
数据段内
)- 将1000送入
数据段内
偏移地址是(BX)的单元中
例子2:BX作为基址寄存器(存放内存地址)
- MOV AX, [BX]
- BX中的数据是偏移地址EA(
数据段内
)- 将数据段内
偏移地址
是(BX)的单元内容送给AX
例子3:CX作为计数器(Counter),用于循环次数计数
MOV AX, 0
MOV CX, 8
NEXT: ADD AX, 2
LOOP NEXT ;
LOOP 循环指令
2. 变址寄存器(2个): SI和DI
- 在内存寻址方式中用于存放地址
- SI:源地址寄存器(Source Index)
- DI:目的地址寄存器(Destination Index)
例:MOV AX, [SI] ; SI = 2000H
MOV BX, [DI] ; DI = 3000H
- 专用:串操作中用SI和DI寻址(
变址
)
例:利用SI,DI拷贝字符串
MOV SI , 2000H
MOV DI , 3000H
MOV CX, 100H
…
CLD
......
REP MOVSB
- 指针寄存器:SP和BP
- 用于寻址堆栈内的数据,
与SS联合使用定位栈中单元
- SP:堆栈指针寄存器(Stack Pointer),指示栈顶位置
- BP:基址指针寄存器(Base Pointer),定位栈中某个基址
- 指令指针寄存器IP(Instruction Pointer)
- 指示内存中指令的位置
- IP是专用寄存器
- IP与CS联合使用定位
下一条指令
的内存地址- 随着指令执行,IP自动修改为
下一条指令
的内存地址 - 修改IP的其他方法:
转移指令
(JMP 2000:0100)
- 随着指令执行,IP自动修改为
- CPU复位
- CS = FFFFH,IP=0000H
- CS = FFFFH,IP=0000H
- 标志(Flags)寄存器
- 反映指令执行结果或控制指令执行方式
- 多种标志形成16位寄存器(
FLAGS
)- 程序状态字PSW
- 标志分类
- 状态标志:记录程序运行的状态信息(
由指令执行自动设置
)- CF、ZF、SF、PF、OF、AF
- 控制标志:控制处理器执行指令的方式(
由程序按需设置
)- DF、IF、TF
- 状态标志:记录程序运行的状态信息(
(1)零标志ZF(Zero Flag)
若运算结果为0,则ZF = 1;否则,ZF = 0
符号标志SF(Sign Flag)
若运算结果最高位为1(负),则SF=1;否则,SF=0
有符号数用最高位表示数据的符号
所以,最高位就是符号标志S的状态
进位标志CF(Carry Flag)
若结果最高位有进位或借位,则CF=1;否则CF=0
溢出标志OF(Overflow Flag)
若算术运算结果有溢出,则OF=1;否则,OF=0
- 溢出标志OF与进位标志CF的比较(无/有符号)
- 进位标志CF
- 表示无符号数运算结果是否超出范围
- 溢出标志OF
- 表示有符号数运算结果是否超出范围
- 进位标志CF
- 溢出标志OF与进位标志CF的比较(无/有符号,补码)
- 处理器对两个操作数进行运算时
- 按照无符号数设置进位标志CF
- 同时根据有符号数设置溢出标志OF
- 应该利用哪个标志由程序员决定
- 无符号数:进位
- 有符号数:溢出
- 处理器对两个操作数进行运算时
3.标志寄存器
- 控制标志
- DF(Direction Flag)方向标志
- DF=1:SI,DI地址递减;
- DF=0:SI,DI地址递增;
修改DF:CLD指令/STD指令
- IF(Interupt Flag )中断标志
- IF=1:允许中断
- TF(Trap Flag)陷阱标志(跟踪标志)
- TF=1:每条指令后引起中断(陷阱,用于单步操作)
- TF=0:正常工作.
- DF(Direction Flag)方向标志
4.段寄存器(16位)
- 作用:段寄存器用存放段的起始地址
- CS(代码段):指明代码段的起始地址
- SS(堆栈段):指明堆栈段的起始地址
- DS(数据段):指明数据段的起始地址
- ES(附加段):指明附加段的起始地址
- CS(代码段)
- 指明代码段的起始地址
- 代码段用来存放程序的指令序列
- 指令指针寄存器IP指示
下一条指令
偏移地址 - 处理器利用
CS:IP
取得下一条指令
- SS(堆栈段)
- SS(堆栈段):指明堆栈段的起始地址
- 堆栈段确定堆栈所在的主存区域
- 堆栈指针寄存器SP指示
堆栈栈顶
偏移地址 - 处理器利用
SS:SP
操作堆栈顶的数据
- DS(数据段)
- DS(数据段):指明数据段的起始地址
- 数据段存放运行程序所用的数据
- 由内存寻址方式得到
操作数
偏移地址EA
- 处理器利用
DS:EA
存取数据段中的数据
- ES(附加段)
- ES(附加段):指明附加段的起始地址
- 附加段是附加的数据段,也保存数据:
- 由内存寻址方式得到
操作数
偏移地址EA
- 处理器利用
ES:EA
存取附加段中的数据 串操作指令
将附加段
作为目的数存放区
文章来源:https://blog.csdn.net/qq_62322176/article/details/132731920
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!