无用章节,了解即可。
微型计算机系统主要由以下部分组成:
其中,微型计算机由以下四个部分组成:
随堂练习:
51单片机是( )
A、中央处理器
B、微处理器
C、微型计算机
D、微机系统
总线:
总线是指连接计算机各部件的一组公共信号线。
总线宽度:
总线上能传输的二进制信息的宽度称为总线宽度。
总线按照传输的信息的类型可以分为:
总线也可以根据其所属单元的不同分为片内总线和片见总线。
微处理器通常包含:
英文缩写 | 全拼 | 部件名 | ||
---|---|---|---|---|
ALU | Arithmetic Logic Unit |
算术逻辑单元 | 用于实现算术操作 | 其拥有两个输入接口( |
FR | Flag Register | 标志寄存器 | 用于缓存各种运算产生的标志,例如缓存"发生溢出"标志 | |
A | Accumulator | 累加器 | 最常用的寄存器,常与ALU一起完成各种运算 可以暂存上一步计算的数据 可使用指令对寄存器中数据进行位操作等 |
|
RA | 寄存器阵列 | |||
PLA | Programmable Logic Array |
可编程逻辑阵列 也称定时与控制电路 |
||
PC | Program Counter | 程序计数器 | 指向下一条要执行的指令的地址 | |
ID | Instruction Decoder |
指令译码器 | 对IR中存放的指令进行译码, 以确定要执行的操作 |
|
IR | Instruction Register |
指令寄存器 | 存放从存储器取出的要执行的指令 | |
AR | Address Register |
地址寄存器 | 存放正要取出的指令的地址或操作数的地址 | |
DR | Data Register | 数据寄存器 | 暂存数据或指令 |
则微处理器执行一条指令的简要流程为:
则执行一条指令必定发生的过程有:
存储器的读写主要通过控制:
8086系列微处理器:
8086内部结构示意图如下:
8086可以被分为执行单元(EU)和总线接口单元(BIU)两部分,
总线接口单元BIU功能:
8086 CPU的优点有:
随堂练习:
8086/8088的CPU内部有14个16位寄存器(不算I/O等),其可以被分为如下三组:
寄存器 | ||
---|---|---|
AX(AH、AL) | 数据寄存器 | 通常被当成累加器使用,存放运行结果等 |
BX(BH、BL) | 数据寄存器 | 通常存放数据区的首地址,常做基址寄存器 |
CX(CH、CL) | 数据寄存器 | 通常被当成计数器,例如loop循环中记录循环次数 |
DX(DH、DL) | 数据寄存器 | 通常被用于存放输入输出端口进行访问时用于指明端口地址 |
SP | 堆栈指针寄存器 | 存放堆栈栈顶偏移地址 |
BP | 基址寄存器 | 用于指出堆栈中某个单元的偏移地址 |
SI | 源变址寄存器 | |
DI | 目的变址寄存器 | |
IP | 指令指针寄存器 | 程序计数器PC的实现的一部分,指向要执行的指令的偏移地址,从段寄存器开始计算,程序计数器PC即CS:IP。 |
FLAG | 状态标志寄存器 | 又叫程序状态字寄存器,其存储的是程序状态字(PSW),具体用法见第二章 微处理器与总线 > ^lc5omw |
CS | 代码段段寄存器 | |
DS | 数据段段寄存器 | |
SS | 堆栈段段寄存器 | |
ES | 附加段段寄存器 |
注:
imul
默认会将乘积存放在寄存器 AX
中程序状态字寄存器及状态字标志含义:
状态字位: | 15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
字含义: | OF | DF | IF | TF | SF | ZF | AF | PF | CF |
状态标志位(CPU自动设置):
标志位 | ||
---|---|---|
CF |
Carry Flag |
进位标志,当加法或减法运算产生最高位进位或错位时触发该标志,相当与无符号运算的溢出标志位(但是符号运算也可以触发)。 |
PF |
Parity Flag |
奇偶性标志,执行结果的低八位中 1 的个数为奇数时被置 1 。 |
AF |
Auxiliary Carry Flag |
辅助进位标志位,低字节中低4位产生进位或者借位时置 1 。 |
ZF |
Zero Flag |
零标志位,若指令运算结果为 0 时置 1 。 |
SF |
Sign Flag |
符号标志,CPU取运算结果最高位放入此位(CPU不管该运算结果是否有符号,只取最高位放到此处)。当运行符号运算时可以用于判断运行结果的符号。 |
OF |
Overflow Flag |
溢出标志,当符号运算产生算术溢出时触发该标志位,CPU判此位时以有符号运算原则判定(CPU不管实际运算是否有符号),例如下方随堂练习5和6,两正数相加得负数被判溢出。 |
控制标志位(用户手动设置):
标志位 | ||
---|---|---|
DF |
Direction Flag |
方向标志,用于控制串指令方向,当 DF=1 时变址寄存器自动递减,反之递增。该标志使用 STD 指令置位,使用 CLD 指令清零。 |
IF |
Interrupt-enable Flag |
允许中断标志位,当设置为 1 时允许中断,否则关闭可屏蔽中断。 |
TF |
Trap Flag |
单步陷阱标志位,当 TF=1 时CPU进入单步工作模式,通常在调试时开启。 |
随堂练习:
8086/8088 CPU中,哪些寄存器既可以做8位寄存器,也可以做16位寄存器使用?
说明8086/8088 CPU中,标志寄存器中的OF是什么标志位?功能是什么?标志寄存器中的CF又是什么?功能是什么?
两个符号数相加后,若 CF=1
,能说明结果是否溢出?请举例说明?
1
。-118 + 120
:10001010 + 01111000 = 00000010
例题2.1:
例题2.2:
例题2.3:
已知AX=987CH,BX=7880H,执行指令 ADD AX,BX
后。AX、CF、OF的值为?
已知AL=9CH,BL=68旦,执行指令 SUB AL, BL
后,AL、CF、OF、SF、ZF的值为?
8086CPU引脚图:
注:
引脚号 | 引脚label | |
---|---|---|
2-16、39 | 地址和数据分时复用引脚 | |
17 | 非屏蔽中断请求引脚。 | |
18 | 可屏蔽中断请求引脚。 | |
19 | 时钟信号引脚,通常由时钟发生器8284输入。 | |
21 | 复位引脚。高电平触发,触发后使 CS=FFFFH ,其他寄存器为 0 ,即指向 FFFF0H 的位置。通常在此处放一个转移指令,跳转到入口地址。 |
|
22 | 用于接收存储器或IO的就绪信号,高电平表设备空闲。 | |
24 | 中断响应信号。 | |
27 | 在最小模式系统中用来控制数据收发器8286/8287,要配合 |
|
28 | 指明是操作存储器还是IO设备。 | |
29 | 写信号标志引脚,表示当前CPU正在写存储器/IO。 | |
32 | 读信号标志引脚,表示当前CPU正在读存储器/IO,可以控制存储单元表示读数据。 | |
33 | 当该引脚为低电平时,CPU工作在最大模式;会开启其他协处理器或逻辑电路,如三角函数运算加速器、DMA等。 当该引脚为高电平时,CPU工作在最小模式; |
|
34 | BHE 引脚和 S7 引脚分时复用; BHE 低电平有效,表示数据总线高八位有效,作为基地址或片选线使用。 |
|
35-38 | 地址线和状态线分时复用引脚(8086地址总线有20位,这是剩下4位)。 |
常考引脚功能:
随堂练习:
MOV AX,BUF
指令时(BUF为字变量),其引脚信号 MOV BUF,AL
指令时(BUF为字变量),其引脚信号 基本概念:
READY
引脚进行,该引脚由存储器输出,输入到CPU中。随堂练习:
1.8086/8088系统中,CPU执行每一条指令时都需要先访问 获取指令,至少需要 个时钟周期来取指令。
2.8088/8086访问慢速内存时,当 READY
管脚为低电平时,会在总线周期的 后插入Tw。
8086/8088的总线引脚:
8086的总线引脚为AD0到AD15,8088的总线引脚为AD0到AD7。
其地址总线和数据总线分时复用,故需要在电路上增设地址锁存器。
与8086/8088CPU配套的地址锁存器型号为8282/8283芯片(其中8283为反向输出芯片),配套的总线控制器为8288芯片,其连接拓扑图如下:
8282、8286芯片均为8位芯片,若使用8086CPU,其需要配备两组芯片才可覆盖16位。
8282三态输出锁存器的引脚图如下:
其 DI
引脚为输入引脚, DO
引脚为输出引脚。
其可以实现三态输出:
1. 高电平状态
2. 低电平状态
3. 高阻状态
其中,
STB
引脚应当与CPU的 ALE
引脚相连,在CPU在总线时钟的T1内 ALE
会从高电平变为低电平,触发锁存。
8286三态输出数据收发器,该芯片可选装配,用于放大CPU的输出信号功率。
其引脚及其内部结构图如下:
其中:
1. 16号引脚
2. 4号引脚
注:
随堂联系:
8086读总线时序图:
8086写总线时序图:
随堂练习:
基本规定:
基本概念:
存储单元内容:一个存储单元中存放的信息称为该存储单元的内容。
规则存放:若一个字以偶地址为开始存放,则该存放方法为规则存放。
非规则存放:若一个字以奇地址为开始存放,则该存放方法为规则存放。
对于规则存放的一个字,取其数据只需要一个指令周期;而取非规则存放的一个字则需要两个指令周期,如下图所示:
内存分段技术最早就是由8086 CPU引入,由于其算术逻辑单元等寄存器均为16位的寄存器,但其想要达到20位的寻址空间(1MB),因此其将20位的内存寻址空间划分为了64个逻辑段,并使用了 CS
、 SS
、 DS
、 ES
四个段寄存器来进行指定给程序使用,这四个段寄存器通常由操作系统设置。
各段寄存器及其含义如下表所示:
段寄存器 | |
---|---|
CS |
代码段段地址寄存器 |
DS |
数据段段地址寄存器 |
SS |
堆栈段段地址寄存器 |
ES |
附加段段地址寄存器 |
注意:
段地址:偏移地址
,因此要取的指令地址通常表示为 CS:IP
,堆栈顶单元地址通常表示为 SS:SP
。MOV AX 2000H
及其对应的内存结构如下表所示,则该指令运行完毕后 AX=0x3412
。段内内存地址 | 内存数据 |
---|---|
... | |
2000H | 0x12 |
2001H | 0x34 |
... |
CS DS ES SS
的顺序安排的。随堂测试:
02000H
开始分配段区且连续分配,代码段占用8KB,数据段占用2KB,堆栈段占用256B,求代码段寄存器、数据段寄存器和堆栈段寄存器的值。