文章目录
第一章 基础知识
一,计算机中的数制与码制
1.1 数制
二进制 后缀 —— B
八进制 后缀 —— Q
十六进制 后缀 —— H
十进制 后缀 —— D (可省略)
1.2 码制
1.2.1 原码
[
X
]
原
=
{
X
,
0
≤
X
≤
2
n
−
1
−
1
2
n
−
1
+
∣
X
∣
,
−
(
2
n
−
1
−
1
)
≤
X
≤
0
[X]_原=\begin{cases} X, & 0\leq X \leq 2^{n-1}-1\\ 2^{n-1} + |X|, & - (2^{n-1}-1)\leq X\leq 0 \end{cases}
[X]原={X,2n−1+∣X∣,0≤X≤2n−1−1−(2n−1−1)≤X≤0
有符号数 第一位(最高位)为符号位
字长为8的机器:
[-127]原= 1111 1111
[127]原 = 0111 1111
[+0]原 =0000 0000
[-0]原 = 1000 0000
0 的原码有正零和负零之分。
1.2.2 反码
[
X
]
反
=
{
X
,
0
≤
X
≤
2
n
−
1
−
1
2
n
−
1
+
X
,
−
(
2
n
−
1
−
1
)
≤
X
≤
0
[X]_反=\begin{cases} X, & 0\leq X \leq 2^{n-1}-1\\ 2^n -1+ X, & - (2^{n-1}-1)\leq X\leq 0 \end{cases}
[X]反={X,2n−1+X,0≤X≤2n−1−1−(2n−1−1)≤X≤0
正数的反码与相应的原码完全相同,负数的反码只需把相应的绝对值按位求反。
字长为8的机器:
[+0]反 = 0000 0000
[-0]反 = 1111 1111
[+127]反 = 0111 1111
[-127]反 = 1000 0000
1.2.3 补码
[
X
]
补
=
{
X
,
0
≤
X
≤
2
n
−
1
−
1
2
n
+
X
,
−
2
n
−
1
≤
X
≤
0
[X]_补=\begin{cases} X, & 0\leq X \leq 2^{n-1}-1\\ 2^n + X, & - 2^{n-1}\leq X\leq 0 \end{cases}
[X]补={X,2n+X,0≤X≤2n−1−1−2n−1≤X≤0
正数的补码与相应的原码完全相同,负数的补码只需把相应的绝对值按位求反并在末位 +1 即可。
字长为8的机器:
[+0]补 = 0000 0000
[-0]补 = 0000 0000
[+127]补 = 0111 1111
[-127]补 = 1000 0001
1.2.4 偏移码
主要用于数/模转换中,被转换数如果要参加运算:
[
X
]
移
=
2
n
−
1
+
X
[X]_移 = 2^{n-1}+X
[X]移=2n−1+X
字长为8的机器:
[-128]移 = 0000 0000
[0]移 = 1000 0000
[+127]移 = 1111 1111
1.2.5 补码运算
[ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [ X − Y ] 补 = [ X ] 补 + [ − Y ] 补 [ X+ Y]_补= [X]_补+ [Y]_补\\ [ X- Y]_补= [X]_补+ [-Y]_补 [X+Y]补=[X]补+[Y]补[X−Y]补=[X]补+[−Y]补
1.2.6 溢出判别
当两个带符号我的二进制数进行补码运算时,结果超出 运算装置 所能表示的范围。
(8位 -128~127)
双高位判别法:
结果最高位的进位
C
s
C_s
Cs(符号位的进位)
结果次高位的进位
C
p
C_p
Cp(数值最高位的进位)
在二进制补码加减中:
-
C s C_s Cs 和 C p C_p Cp 相同(同为1或0)时,无溢出。
-
C s C_s Cs 和 C p C_p Cp 相异时,无溢出。( C s C_s Cs=0, C p C_p Cp=1 为正溢出; C s C_s Cs=1, C p C_p Cp=0 为负溢出)
-
正数+负数 肯定不溢出,结果为正 C s C_s Cs = C p C_p Cp =1;结果为付 C s C_s Cs = C p C_p Cp =0。
-
微型计算机中采用“异或”线路来判别有无溢出的产生。
1.2 小数点问题
1.2.1 定点表示法
小数点在数中的位置固定不变,通常有两种:
- 定点整数——将小数点固定在最低数位之后
- 定点小数——将小数点固定在最低数位之前
对小数点位置做出选择之后,运算中所有数均应统一为定点整数或定点小数,运算中不再考虑小数点问题。
数值范围有局限性,运算精度低。
1.2.2 浮点表示法
为了扩大数值范围,提高运算精度,计算机中大多采用浮点表示法。
二进制数N表示成如下形式:
N
=
±
S
×
2
±
J
N=\pm S \times 2^{\pm J}
N=±S×2±J
该表达式在计算机中表示为:
J f J_f Jf | J J J | S f S_f Sf | S S S |
---|---|---|---|
阶符(指数符号) | 阶数(指数) | 尾符(底数符号) | 尾数(底数) |
S
S
S —— 尾数,一般以纯小数表示,表示全部有效数字。
S
f
S_f
Sf—— 尾符,浮点数的符号。(0为正,1为负)
J
J
J —— 阶数,整数表示,与阶符一起决定小数点的实际位置
J
f
J_f
Jf—— 阶符,阶数的符号。(0为正,1为负)
10110.101B = 0.10110101 * 2^5
S = 101101010
Sf = 0
J = 00101
Jf = 0
计算机中:
0 00101 0 101101010
浮点数应用注意:
- 浮点数的规格化
- 浮点数的对阶原则
1.3 十进制数的二进制编码
1.3.1 十进制数的二进制编码:
BCD 码 :8421码,2421码,余3码(8421码+3)
1.3.2 字符信息的编码
-
ASCLL 码
A —— 41H
a —— 61H
1 —— 31H -
汉字编码
- 外部码
- 内部码
- 交换码
- 输出码
二,微型计算机的组成
2.1 微处理器(CPU)
是微型计算机的核心部件。
微
处
理
器
(
C
P
U
)
{
算
术
逻
辑
部
件
(
A
L
U
)
控
制
部
件
寄
存
器
堆
内
部
总
线
微处理器(CPU)\begin{cases} 算术逻辑部件(ALU)\\ 控制部件 \\ 寄存器堆\\ 内部总线 \end{cases}
微处理器(CPU)⎩⎪⎪⎪⎨⎪⎪⎪⎧算术逻辑部件(ALU)控制部件寄存器堆内部总线
2.2 微型计算机
微 型 计 算 机 { C P U 存 储 器 输 入 / 输 出 ( I / O ) 接 口 系 统 总 线 微型计算机\begin{cases} CPU\\ 存储器\\ 输入/输出(I/O)接口\\ 系统总线 \end{cases} 微型计算机⎩⎪⎪⎪⎨⎪⎪⎪⎧CPU存储器输入/输出(I/O)接口系统总线
存储器分为
内部存储器,外部存储器
包括:随机存储器(RAM)和只读存储器(ROM)
2.2 微型计算机系统
微型计算机系统是在微型计算机基础上配置系统软件和部分外设组成的。
第二章 80x86微处理器
8086是Intel系列的16位微处理器,它的内部和外部数据总线都是16位,地址总线宽度 20 位,内存储器的寻址空间为 1MB,I/O 地址总线宽度 16位(地址总线的 低16位),所以端口的寻找空间为64KB。
2.1 8086CPU 内部功能结构
总线接口部件(BIU)+执行部件(EU)
(并不是实际布局或物理结构,而是从程序员/使用者角度来看的编程结构)
两者采用并行方式协调工作。
2.1.1 总线接口部件(BIU)
负责与CPU 外部(存储器,I/O端口)传送指令代码或数据。
组成:
- 4 个16位的段地址寄存器(CS,DS,ES,SS)。
- 16 位的指令指针寄存器IP
- 20位的地址加法器
- 6B的指令队列缓冲器
- 16位的内部暂存器
- 总线逻辑控制器
(1)段地址寄存器
低4位均为0,共 20 位。
- CS:16位代码段寄存器,寄存程序代码段首地址的高16位。
- DS:16位数据段寄存器,寄存数据段首地址的高16位。
- ES:16位拓展段寄存器,寄存另一个数据段首地址的高16位。
- SS:16位堆栈段寄存器,寄存堆栈区数据段首地址的高16位。
(2)16位的指令指针寄存器 IP
指出当前指令在程序代码段中的16位偏移量。(即EU要执行的下一条指令的偏移地址)
程序不能直接对 IP 进行存取。
有些指令能使IP的值改变:如转移,调用,中断,返回指令。
(3)20位的地址加法器
用来产生20位物理地址
(16位[段基址]<<4) + 16位[偏移地址] = 20位物理地址
(4)6B的指令队列缓冲器
用来存放预取指令的指令队列
(5)16位的内部暂存器
暂存输入/输出信息的寄存器
(6)总线逻辑控制器
以逻辑控制方式实现总线上的信息传送,如信息分时传送等。
2.1.2 执行部件(EU)
负责指令的执行
组成:
- 4个通用寄存器(AX,BX,CX,DX)
- 4 个专用寄存器(BP,SP,SI,DI)
- 算术逻辑单元
- EU 控制器
- 标志寄存器
(1)4个通用寄存器
- AX:16位的累加器,也可用作两个八位累加器(AL,AH)。
- BX:16位的基数寄存器,也可用作两个八位累加器(BL,BH)。可用来寄存器间接寻址
- CX:16位的计数寄存器,也可用作两个八位累加器(CL,CH)。CX循环计数寄存器(LOOP等…),CL循环移位寄存器(SHR,SHL,ROR,ROL等…)
- DX:16位的数据寄存器,也可用作两个八位累加器(DL,DH)。作为 I/O 指令专用间接寻址寄存器。
(2)4个专用寄存器
- BP:16位的基数指针寄存器,用来存放位于堆栈段中的一个数据区基址的偏移地址。
- SP:16位的堆栈指针寄存器,指向堆栈栈顶偏移地址。PUSH 和 POP就是用SP给出的偏移地址,这两个指令也会自动修改SP。
- SI:16位的源变址寄存器,用来存放当前数据段的偏移地址。串操作指令中源操作数的偏移地址存放在在SI中。
- DI:16位的目的变址寄存器,也是用来存放当前数据段的偏移地址。串操作指令中目的操作数的偏移地址存放在在DI中。
注意:串操作指令的两个操作数地址放在 SI(源操作数),DI(目的操作数)中。
(3)算术逻辑部件(ALU)
功能:
- 进行算术/逻辑运算
- 按指令的寻址方式计算出所寻址的16位偏移地址
(4)EU控制器
是执行指令的控制电路,实现从队列中取指令,译码,产生控制信号等。
(5)标志寄存器
16位状态寄存器(7位未用)存放操作后的状态特征和人为设置的控制标志。
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OF | DF | IF | TF | SF | ZF | AF | PF | CF |
状态标志(6个):
- SF(Sign Flag)符号标志:负为1,正为0 。
- ZF(Zero Flag)零标志:零为1,非零为0。
- PF(Parity Flag)奇/偶标志:结果低8位所含1的个数为偶数为1,结果低8位所含1的个数为奇数为0。
- CF(Carry Flag)进位标志:最高位进位或借位为1,否则为0。循环移位操作时也会影响CF。
- AF(Auxiliary Carry Flag)辅助进位标志:第3位向第4位进位或借位时为1,否则为0。(用于BCD码等十进制编码)
- OF(Overflow Flag)溢出标志:溢出为1,否则为0。双高位判别法。
控制标志(3个):
- DF(Direction Flag)方向标志:在串操作指令中用来控制串操作过程中地址的增减:DF=0,则地址递增;DF=1,则地址递减。
- IF(Interrupt Enable Flag)中断标志: 在中断过程中控制是否响应可屏蔽中断的请求:IF=0,CPU 不能响应可屏蔽中断请求;IF=1,CPU 可响应可屏蔽中断请求。(可屏蔽中断和不可屏蔽中断都是指外部中断)
- TF(Trap Flag)跟踪标志:在中断过程中控制是否响应单步中断的请求:TF=0,CPU 不会响应单步中断;IF=1,CPU 按跟踪方式执行指令。
2.2 8086CPU内部流水线管理工作原理
- 指令队列为空时(程序刚开始或刚执行了跳转指令):EU等BIU提取指令,BIU从存储器中将要执行的程序段指令装入指令队列中。
- 指令队列不空时,EU 和 BIU 独立工作,EU一边读指令执行,BIU一边取指令。
- 指令队列满了,EU又无访问请求时,BIU便进入空闲。
- 指令队列出现两个空字节时,BIU再装指令
- 两种特殊情况:
- EU 执行指令过程中需要进行外部访问时,请求 BIU去做外部访问,若BIU空闲,就立即响应EU请求;若BIU正取指令,则完成当前取指令后再去响应EU。
- EU执行跳转指令,指令队列自动清空。
2.3 8086CPU 的存储器组织
2.3.1 存储器分段
-
8086CPU 引入了存储器分段技术,把 1MB 内存空间分成若干逻辑段,每个逻辑段的内存空间<=64KB.
-
段与段之间相互独立,段内地址连续,段的排列可以连续,分开,部分重叠或完全重叠,每个段又不一定要占有 64KB 的最大段空间。
-
逻辑段的第一个单元的物理地址(20位)叫作 段首址。8086规定20位段首址的最低4位应该全是0,高16位 即为段基址。段内某存储单元距离段首地址的字节数(即偏移量)叫作偏移地址。
-
段基址放在相应段寄存器DS,ES,SS,CS中
-
偏移地址 可以由 IP,BP,SP,SI,DI,BX 给出,也可通过寻址方式计算给出。
-
存储单元的逻辑地址由段基址 和 偏移地址 两部分构成。
-
书写:段基址:偏移地址
-
物理地址 = 段基址*16 + 偏移地址
-
除串操作以外的其他操作中:SI,DI,BX 的默认段寄存器是 DS,可加前缀改变段基址来源。
-
程序中可以动态修改段寄存器的内容来访问超过 64KB 的空间
2.3.2 存储器组织
- 8086 的 1MB 存储器实际上被分成了两个 512 KB 存储区,分别叫做 奇地址区(奇区),偶地址区(偶区)。
- 偶区单元中的数据与数据总线上的低位字节数据线 D 7 D_7 D7~ D 0 D_0 D0 相连;奇区单元中的数据与数据总线上的高位字节数据线 D 15 D_{15} D15~ D 8 D_8 D8 相连。
- 地址线 A 19 A_{19} A19~ A 1 A_1 A1 可同时对 奇,偶 区内单元寻址, A 0 A_0 A0, B H E ‾ \overline{BHE} BHE(8086的一条引脚)则用于对奇,偶区的选择, A 0 A_0 A0=0选择偶区, A 0 A_0 A0=1选择奇区。
- 注意:存储单元在 逻辑结构 上是按地址顺序排列的。
A 0 A_0 A0, B H E ‾ \overline{BHE} BHE信号表示的相应操作。
B H E ‾ \overline{BHE} BHE | A 0 A_0 A0 | 操作 | 所用数据线 |
---|---|---|---|
0 | 0 | 从偶地址读/写一个字 | D 15 D_{15} D15~ D 0 D_0 D0 |
1 | 0 | 从偶地址读/写一个字节 | D 7 D_{7} D7~ D 0 D_0 D0 |
0 | 1 | 从奇地址读/写一个字节 | D 15 D_{15} D15~ D 8 D_8 D8 |
1 | 1 | 从奇地址读/写一个字(分两个总线周期实现,首先作奇字节读/写,再弄偶字节) | D 15 D_{15} D15~ D 8 D_8 D8, D 7 D_{7} D7~ D 0 D_0 D0 |
2.4 8086CPU 总线周期的概念
BIU 通过系统总线完成对外界(存储器或 I/O 端口)的一次访问所需要的时间叫作一个 总线周期。
计算机时间的最小单位是 时钟周期(一个时钟脉冲的时间长度,也是8086CPU的基本时间计量单位,由计算机主频决定),由4个时钟周期组成一个最基本的总线周期。这4个时钟周期分别称为 T 1 T_{1} T1状态, T 2 T_{2} T2状态, T 3 T_{3} T3状态, T 4 T_{4} T4状态
总线周期 除了以上4种状态,还有两种状态:. T w T_{w} Tw等待状态, T I T_{I} TI空闲状态
T1状态: CPU向多路复用总线(AD总线)发地址信号。
T2状态:复用总线低16位为高阻状态,准备传输数据,高4位输出本总线周期的状态信号。
T3状态:高4位继续输出状态信息,低16位传输数据。
如信息未准备好,此时插入TW等待周期。
T4状态:总线周期结束。
T
w
T_{w}
Tw等待状态:等待外设或内存或I/O接口的响应
T
I
T_{I}
TI空闲状态:当 CPU 和内存或I/O接口之间不需传输数据,且指令队列填满时,CPU 不需要执行总线周期,系统总线 就处于空闲状态,这时,总线高四位上CPU仍保持前一总线周期的状态信息。
2.5 8086CPU 的引脚信号及工作模式
2.5.1 CPU的最小模式 和最大模式
最小模式:系统中只有一个8086微处理器。总线控制信号都直接由8086CPU产生
最大模式:系统中包含有两个或多个微处理器,8086是系统的主处理器。其他处理器是协处理器。总线控制信号由 8288 总线控制器产生。
工作在哪个模式由 8086CPU的第33引脚决定。
2.5.2 8086CPU 的引脚信号
- 16根数据线(外数据总线)
- 20根地址线(外地址总线)
- 5根状态线
- 17根 输入/输出控制线
- 3根电源线
- 共61根(部分引脚功能复用)
(1)最小模式下各引脚功能定义(待补充)
最小模式下引脚信号类型有:双向引脚信号,输入引脚信号,输出引脚信号
类型 | 名称 | 符号 | 功能 |
---|
…
(2)最大模式下各引脚功能定义(重新定义的一些引脚)(待补充)
2.5.3 8086CPU 工作模式的典型配置(待补充)
2.6 8086CPU 的操作时序(待补充)
8086CPU 的主要操作时序可分为:系统复位和启动操作,暂停操作,空操作,总线读操作,总线写操作,中断操作,总线保持。