1 微型计算机基础概论
1.1 微型计算机系统
Content:
- 微机的一般工作过程以及微机系统的组成3个方面
- 建立整个系统的简单框架
1.1.1 微型计算机的发展
略
1.1.2 微型计算机的工作过程
1 - 冯.诺依曼 计算机
计算机的工作过程就是执行程序的过程,而程序则是指令序列的集合
每台计算机都拥有各种类型的机器指令,这些指令按照一定的规则存放在存储器中,在中央控制系统的统一控制下,按照一定顺序一次依次执行
存储程序:把程序和数据送到具有记忆功能的存储器中保存起来
主要特点:
- 将计算过程描述为由许多条指令按一定顺序组成的程序,并放入存储器中保存
- 程序中的指令和数据必须采用二进制编码,且能够被执行该程序的计算机识别
- 指令按其在存储器中存放的顺序执行,存储器的字长固定并按顺序线性编址
- 控制器控制->整个程序和数据的存取and程序的执行
- 以运算器为核心,所有的执行都经过运算器
2 - 微型计算机的工作过程
微机的工作过程就是执行程序的过程–执行每条指令序列的过程
=>不断的 取指令 和 执行指令 的过程。
执行该过程的示意图:
指令周期:
--(取指令阶段)--
-
首先将第一条指令由内存中取出(这是个)
-
将去除的指令送入指令译码器译码,以确定要进行的操作
–(执行指令阶段)–
-
读取相应的操作数(执行的对象)
-
执行指令
-
存放执行结果
-
指令执行完毕,转入下一条指令的取指令阶段,不断重复直到meet暂停指令而停止
取指令阶段:一系列相同的操作组成。取指令阶段的时间总是相同的,称为公共操作。
执行阶段:由不同的事件顺序组成,具体取决于被执行指令的类型。指令不同,执行阶段耗时也各不相同。
一个简单实例中读取第一条指令的工作过程示意图:
10110000 00000101 MOV A,5 ;第一个操作数(5)送到累加器
00000100 00001000 ADD A,8 ;5与第2个数(8)相加,结果(13)送到累加器
11110100 HLT ;停机
取第一条指令过程如下(内存储器中已经事先存储好了如上所示的程序):
- 指令所在地址(00H)赋给程序计数器PC并送到地址寄存器AR
- PC自动+1(00H -> 01H),AR的内容不变
- 将地址寄存器AR的内容(00H)放到地址总线AB上,并送至内存储器,经地址译码器译码,选中相应的00H单元的指令
- CPU的控制器发出读命令
- 在读 命令控制下,将所选中的00H单元中的内容(即第一条指令的操作码10110000)读到数据总线DB上
- 将读出的内容10110000经数据总线DB送到数据寄存器DR上
- 去指令阶段最后一步是指令译码。因为取出的是指令的操作码,数据存储器DR将它送到指令寄存器IR,然后再送到指令译码器ID。
哒哒,这样就完成了第1条指令的读取!
第2条以及后续指令的读取过程与第1条指令是一样滴,而由于指令不同,每次译码后指令译码器ID中的内容也会不同
1.1.3 微机系统的组成
tips:微机系统、微型机和微处理器是3个不同的概念。
微机系统的组成框图:
总线BUS:具体实现上,微机的各组成部分之间通过总线连接,总线是部件之间信息传递的公共通道。
其中,
- AB - Address Bus : 地址总线,单向,三态,传送 读/写存储器(RAM或ROM)或输入输出接口(I/O接口) 的地址信息
- DB - Data Bus : 数据总线,双向,三态,传送要操作的数据
- CB - Control Bus : 控制总线,都有,取决于控制什么,传送控制信息
微机的系统结构框图:
1 - 硬件系统
1) 微处理器/中央处理器/CPU
CPU是微机的核心芯片,是整个系统的运算和指挥控制中心。
无论那种CPU,其内部基本组成都大同小异,主要部分为:控制器、运算器和寄存器组
CPU典型结构示意图:
-
运算器 - AU / Arithmetic Unit:核心为算术逻辑单元(ALU,Arithmmetic and Logic Unit),它是以**加法器(ADDer)为基础,辅以移位寄存器(Shifting Register)**及相应的控制逻辑组合而成的电路。可以完成加减乘除四则运算和各种逻辑运算,包括浮点运算。
-
控制器 - CU / Control Unit : 由指令寄存器IR / 指令译码器ID和操作控制电路组成. CU从存储器中依次取出程序的各条指令,并根据指令要求,香微机各个部件发出相应的控制信号,使各部件协调有序工作.
-
寄存器组 - RS / Registers Set: 实质上是CPU内部的若干个存储单元, 在ASM语言中通常是按照名字来访问它们. 寄存器可分为专用寄存器和通用寄存器.
专用寄存器 - 作用固定, 如堆栈指针SP, 程序计数器PC, 标志寄存器FR
通用寄存器 - 由程序员自行分配规定用途.
2 - 存储器(Memory)
主机系统中的存储器又叫内存or主存 -> 微机的存储和记忆部件
用以存放数据(including 原始数据, 中间结果 和 最终结果)和当前执行的程序
- 内存单元的地址和内容 : 内存由需多单元组成, 在微机中, 每个单元规定存放8位bin码, 即一组bin码, 单位为字节Byte.
为了区分各个不同的内存单元, 需要给每个存储单元编上不同的号码 -> 内存地址(Memory Address)
8088/8086中, CPU的内存地址编码为00000H, 00001H, …, FFFFFH, 共 2 20 2^{20} 220个存储单元. 每个存储单元地址唯一, 所以CPU就可以通过指定地址来正确访问某个特定的内存单元.
内存单元中存放的信息称为内存单元的内容. 内存单元的内容与地址在表现形式上虽然都是bin, 但本质上它们是两个完全不一样的概念
内存
单元的内容与地址示意图:
- 内存的操作 : CPU对内存的操作有读read / 写write两种.
-
读操作 Read - CPU 将内存单元的内容取到CPU内部…
-
写操作 Write - CPU 将其内部信息传送到内存的单元保存起来
假定有256个存储单元,地址00H~FFH, 字长为8位:
存储器读写操作示意图 :
从存储器读出信息的操作过程. 现在CPU要把数据00100110B(26H)写入地址位08H的存储单元, 步骤如下:
- CPU 将存储单元地址08H放到地址总线AB上, 经地址译码器AD选中08H.
- CPU 将要写入到内容26H放到数据总线DB上.
- CPU 向存储器发送"写"控制信号, 在该信号的控制下, 将数据26H写入存储器的08H单元.
- 内存的分类 - 按工作方式不同, 内存可分为两大类 :
-
随机存储器 - RAM / Random Access Memory : 可被CPU随机地读和写, name as 读写存储器. 用于存放用户装入的程序数据及部分系统信息 . 断电后丢失 .
-
只读存储器 - ROM / Read Only Memory : 只能被CPU随机读取,而不能由CPU写入. 断电后不丢失. 主要用来存放*监控程序和基本输入输出程序,以及各种常用数据与表格.
ROM中的内容一般由厂商在出场的时候写入.
3 - 输入输出接口和输入输出设备(I/O)
IO接口和IO设备是I/O系统的硬件组成.
IO设备中, 常用的输入设备Input Device 有键盘, 鼠标, 扫描仪, etc.
与CPU相比, IO设备的工作速度较低, 处理的信息从数据格式到逻辑时序一般都无法与CPU直接兼容 -> 微机与IO设备间的连接与信息交换不能直接进行, 而必须通过一个中间部件作为两者之间的桥梁
=> IO接口(I/O Interface), name as IO适配器(I/O Adapter)
详见Chapter 6.
4 - 总线(Bus)
由一组导线和相关控制电路组成, 是各种公共信号线的集合, 用于微机系统个部件之间的信息传递.
将用于主机系统内部信息传递的总线称为内部总线 Internal Bus, 将连接主机和外部设备之间的总线称为外部总线 External Bus.
- 数据总线 - DB / Data Bus : DB用来传输数据信息, 双向总线,三态,
- 地址总线 - AB / Address Bus : AB用于传送CPU发出的地址信息, 单向总线,三态.
- 控制总线 - CB / Control Bus : CB 用来传送控制信号, 时序信号和状态信息等等. CB中每一根线的方向是一定的, 单向的, 但CB作为一个整体是双向的.
从传送信息的类型上, 内部总线 和 外部总线 都有 DB, AB, CB.
详见Chapter 2.
2 - 软件系统
软件(Software) 包括 系统软件 和 应用软件 两大类.
系统软件 - System Software : 主要包括操作系统 OS(管理计算机资源, 任务调度, 文件管理, 人机接口等)和系统实用程序 System Utilities(编译器, 汇编器, 数据库, 文本编辑器, 诊断和调试程序等).
程序设计语言分三个级别 - 机器语言machine language, 汇编语言assembly language, 高级语言high-level language.
略.
1.2 计算机中的数制与编码
计算机中的数制与编码主要是关注微机中如何表述小数, 即定点数浮点数的部分。这一部分其他的内容具体的可以参照我之前写过的这篇文章:
数电学习笔记Ⅰ——数制、运算与编码
在这就不赘述了
1.2.1 常用记数制
1 - 十进制数(Decimal - Dec)
2 - 二进制数(Binary - Bin)
3 - 十六进制数(Hexadecimal - Hex)
bin数与hex数间转换很方便, 习惯用hex数来简化bin数的表达.
1.2.2 各种数制间的转换
1 - 非十进制 -> 十进制
Easy, 按相应的权表达式展开, 再按十进制运算规则求和, bingo!
E.g. 将1101.101B转成十进制数
(
1101.101
)
B
=
1
×
2
3
+
1
×
2
2
+
0
×
2
1
+
1
×
2
0
+
1
×
2
−
1
+
1
×
2
−
2
+
1
×
2
−
3
=
(
13.625
)
D
\begin{aligned} (1101.101)_B \\ & = 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 + 1 \times 2^{-1} + 1 \times 2^{-2} + 1 \times 2^{-3} \\ & = (13.625)_D \end{aligned}
(1101.101)B=1×23+1×22+0×21+1×20+1×2−1+1×2−2+1×2−3=(13.625)D
2 - 十进制 -> 非十进制
十进制数的整数和小数部分应分别转换.
- 整数部分->bin数时采用除二取余法, 即连续除2并取余数作结果直至商为0, 得到的余数从低位到高位依次排列即得到bin的整数部分.
- 小数部分->bin数采用乘2取整的方法, 即对小数部分连续用2乘, 以最先得到的乘积的整数部分为最高位直至达到要求精度or小数部分为0.
E.g. 将 ( 112.25 ) D (112.25)_D (112.25)D -> bin数:
即 => ( 112.25 ) D = ( 111000.01 ) B (112.25)_D = (111000.01)_B (112.25)D=(111000.01)B
1.2.3 计算机中的二进制数表示
计算机中, 用于表示数量大小的数据称为数值数据 numerical data.讨论数值数据时常涉及两个概念:表数范围和表数精度.
- 表数范围 - range of representation : 指一种类型的数据所能表示的最大值 和 最小值.
- 表数精度 - precision of representation : 用实数值能给出的有校数字的位数表示.
表数范围和表数精度的大小 与 用多少个bin位表示某类数据及怎样对某些位编码有关 .
1 - 定点小数的表示
指小数点的位置 固定不变的小数.
通常都把小数点固定在MSB的左边, MSB表示符号位,称为纯小数:
N = N s ⋅ N − 1 N − 2 ⋅ ⋅ ⋅ N − m − 1 N − m N = N_s \cdot N_{-1} N_{-2} ··· N_{-m-1} N_{-m} N=Ns⋅N−1N−2⋅⋅⋅N−m−1N−m
用m+1个bin位表示上述小数->可以用MSB表示该数的符号. 如上式中的 N s N_s Ns, 后边的m位表示小数的数值部分. 由于规定了小数点放在数值部分的最左边, 所以小数点不需要表示出来
定点小数的表数范围很小,对于用m+1给bin位的小数,其表数范围:
∣ N ∣ = 1 − 2 − m \lvert N \rvert = 1 - 2^{-m} ∣N∣=1−2−m
E.g.
( 0.875 ) D = ( 0.111 ) B = [ 0 1 1 1 0 0 0 0 ] ( − 0.875 ) D = ( − 0.111 ) B = [ 1 1 1 1 0 0 0 0 ] ( 0.11101 ) B = [ 0 1 1 1 0 1 0 0 ] \begin{aligned} (0.875)_D & = (0.111)_B \\ & = [0 \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0] \\ (-0.875)_D & = (-0.111)_B \\ & = [1 \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0] \\ (0.11101)_B & = [0 \ 1 \ 1 \ 1 \ 0 \ 1 \ 0 \ 0] \\ \end{aligned} (0.875)D(−0.875)D(0.11101)B=(0.111)B=[0 1 1 1 0 0 0 0]=(−0.111)B=[1 1 1 1 0 0 0 0]=[0 1 1 1 0 1 0 0]
2 - 整数
小数点定在数据的LSB右边的一种数据, 类似于定点小数, 符号位放在MSB, 任意一带符号的整数都可以表示为:
N = N s N n − 1 N n − 2 ⋅ ⋅ ⋅ N 1 N 0 N = N_s N_{n-1} N_{n-2} ··· N_{1} N_{0} N=NsNn−1Nn−2⋅⋅⋅N1N0
式中: N s N_s Ns表示符号位, 后边的n位表示数值部分.
( 30 ) D = ( 00011110 ) B = [ 0 0 0 1 1 1 0 ] ( − 30 ) D = ( − 00011110 ) B = [ 1 0 0 1 1 1 0 ] \begin{aligned} (30)_D & = (00011110)_B \\ & = [0 \ 0 \ 0 \ 1 \ 1 \ 1 \ 0] \\ (-30)_D & = (- 00011110)_B \\ & = [1 \ 0 \ 0 \ 1 \ 1 \ 1 \ 0] \\ \end{aligned} (30)D(−30)D=(00011110)B=[0 0 0 1 1 1 0]=(−00011110)B=[1 0 0 1 1 1 0]
3 - 浮点数的表示
浮点数 - Float Number : 小数点的位置可以左右移动的数据, 可用下式表示:
N
=
±
R
E
×
M
N = \pm R^{E} \times M
N=±RE×M
式中,
-
M (Mantissa) : 浮点数的尾数, 或称有效数字, 通常是纯小数.
-
R(Radix) : 阶码的基数, 表示阶码采用的数制, 计算机中一般规定 R 为2, 8, 16, 为一常数. -> 尾数为bin, 则R=2. 同一种机器的的R值固定.
-
E s E_s Es - 阶符号, 表示阶码的符号, 即指数的符号, 决定浮点数范围的大小.
-
M s M_s Ms - 尾符, 尾数的符号位, 安排在最高位. 也是整个浮点数的符号位.
典型的浮点数格式:
规定计算机内浮点数的尾数部分用纯小数表示. 即小数点右边第1位不为0 -> 规格化浮点数
E.g.
( 0.0101 ) B = 1.01 × 2 − 2 = [ 0 1000010 010000... ] = [ 符号位 指数 ( 阶码 , 含阶符 ) 尾数 ( 纯小数 ) ] \begin{aligned} (0.0101)_B & = 1.01 \times 2^{-2} \\ & = [0 \quad 1000010 \quad 010000...] \\ & = [符号位 \quad 指数(阶码, 含阶符) \quad 尾数(纯小数)] \end{aligned} (0.0101)B=1.01×2−2=[01000010010000...]=[符号位指数(阶码,含阶符)尾数(纯小数)]
1.3 无符号二进制数的算术运算和逻辑运算
1.3.1 二进制的算术运算
1 - 加法
2 - 减法
3 - 乘法
4 - 除法
除法是乘法的逆运算, bin数的除法运算耶客转换成位减法和右移运算, 每右移一位相当于除2.
1.4 有符号二进制数的表示及运算
有符号数的表示方法
3种, 原码, 反码, 补码
1 - 原码
[ X ] 原 = 符号位 + ∣ X ∣ [ + 0 ] 原 = 00000000 [ − 0 ] 原 = 10000000 \begin{aligned} [X]_原 & = 符号位 + \lvert X \rvert \\ [+0]_原 & = 00000000 \\ [-0]_原 & = 10000000 \end{aligned} [X]原[+0]原[−0]原=符号位+∣X∣=00000000=10000000
2 - 反码
[ X ] 反 [X]_反 [X]反. 对于正数, 反码同原码. 对于负数, 反码则原码按位取反
$$
[X]_反 = \begin{cases}
X & X 为正数
~X & X为负数
\end{cases}
$$
3 - 补码
[ X ] 补 [X]_补 [X]补. 若为负数 : = 反码+1. 若为正数, 与2原码一致
1.4.3 补码的运算
规则:
- 加法 : [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X+Y]_补 = [X]_补 + [Y]_补 [X+Y]补=[X]补+[Y]补
- 减法 : [ X − Y ] 补 = [ X ] 补 − [ Y ] 补 = [ X ] 补 + [ − Y ] 补 [X-Y]_补 = [X]_补 - [Y]_补 = [X]_补 + [-Y]_补 [X−Y]补=[X]补−[Y]补=[X]补+[−Y]补