Introduction
微机原理复习简单纲要
原书:《微型计算机原理与接口技术》-哈尔滨工程大学出版社(吕淑萍等著)
主要内容
- 计算机基础知识:
- 进制及其转换
- 计算机中数的表示(反/补码)
- 微机系统结构与总线
- 存储器(RAM/ROM/Cache)
- 指令系统(操作指令/寻址方式)
- 汇编语言设计基础
- 外部芯片和程序设计:1.8255(IO) 2.8254/8253(计数器) 3.8259(中断)
1.计算机基础知识
1.1 数制及其转换
1.1.1 进位计数值
基本的数制有二/四/八/十/十六进制,分别由B/Q/O/D/H表示.在书写和编程规范中有如下几条规则:
- 数值应该在末尾写明数制符号,如3AH,01B,33D等
- 对于涉及到字母符号的进制(十进制以上)的数值,如果开头是字母,则应该在前面加上’0’表示这是数值而非变量名,如AH应写成0AH
- 只有十进制可以省略数值末尾的符号或者角标,如99D或99
1.1.2 进制转换
各个进制之间的转换我们主要使用加权累积法,进制与进制之间的转换由以下规则确定:
二转十
所有"1"位乘以对应的权后累加得到对应的十进制数, 假设一个二进制数由小数点前x位和小数点后y位组成
D = ∑ n = 1 x 2 n ∗ d n + ∑ n = 1 y 2 − y ∗ d n D=\sum_{n=1}^x2^n*d_n+\sum_{n=1}^y2^{-y}*d_n D=n=1∑x2n∗dn+n=1∑y2−y∗dn
十转二
对十进制数累除直到0,将余数自下到上倒序连接
例题: 1026D转换为二进制
1025/2=513—0
513/2=256----1
256/2=128—0
128/2=64—0
64/2=32—0
32/2=16—0
16/2=8—0
8/2=4—0
4/2=2—0
2/2=1—0
1/2=0—1
Result=100 0000 0010
十六转二和二转十六
十六进制和二进制由于存在天然的倍数关系,即 2 4 = 16 2^4=16 24=16每四个二进制位可以完美地表示一个十六进制位,因此在涉及到二进制数的操作中,我们自然的将其以每四位为一个单元分割并转化为十六进制数
例题1: 10100010111B转换为十六进制数
1.将二进制数化成规范形 0101 0001 0111,首位补齐’0’凑成四位
2.查表或计算每四位二进制数对应的十六进制数
0101B=05H 0001B=01H 0111B=07H
3.按顺序连接十六进制数
10100010111B=0517H
例题2:十六进制数2BH转换为二进制数 (本质是对例题1方法的逆运算)
1.将每位十六进制数根据查表或运算转换成对应的二进制数
02H=10B 0BH=1011B
2.对每组二进制数在前面补齐四位并顺序连接
0010 1011
以上这些都不会怎么办?
打开TMD在线进制转换器 https://www.sojson.com/hexconvert.html
1.2 计算机中数的表示
1.2.1 无符号数
对于一个以N位的二进制数,有符号数最高位为符号位,动态范围为-2N-1~2N-1-1,而对于无符号数,所有位置均用于表示数值,动态范围为0~2N
1.2.2 符号数的表示方法
规定:符号数的最高位中,0表示正号,1表示负号.对于计算机系统中的符号数,正零和负零是同一个数,即有符号数的动态范围比无符号数少1
字节:
1
b
y
t
e
=
8
b
i
t
1byte=8bit
1byte=8bit,计算机数据的基本单位
机器数:符号数(包括符号位)的二进制数表示形式(number)
真值:机器数所表示的数值(value)
其中,机器码有三种表示方法:
- 原码
原始的机器码定义,即最高符号位0表示正号,1表示负号
例子
[ + 100 ] 原 = 01100100 [+100]_原=01100100 [+100]原=01100100最高符号位0+绝对值1100100
- 反码
正数的反码与原码完全相同,负数时的反码除了符号位以外全部取反
例子
[ − 100 ] 反 = 10011011 [-100]_反=10011011 [−100]反=10011011最高符号位1+数字位取反0011011
- 补码
正数的补码与原码完全相同,负数时的补码取反后加一(即反码加一)
例子
[ − 100 ] 反 = 10011011 [-100]_反=10011011 [−100]反=10011011最高符号位1+数字位取反0011011
[ − 100 ] 补 = 10011100 [-100]_补=10011100 [−100]补=10011100最高符号位1+加一得到0011100
补码的特点:
- 消灭了正零和负零机器码一样的bug
- 消灭了原码和反码中相反数相加不等于0的bug
- 简化了加减法运算逻辑,使得加法器可以执行减法
八位二进制数的特殊操作:
1.2.3 符号数的加、减法运算
加减法运算使用补码和无符号数的概念进行操作
例子1-1
已知
X = 64 , Y = 8 , 求 X + Y = ? X=64,Y=8,求X+Y=? X=64,Y=8,求X+Y=?
[ X ] 补 = 01000000 = 64 [ Y ] 补 = 00001000 = 8 [ X ] 补 + [ Y ] 补 = 01001000 = 72 [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X]_补=01000000=64\\\\ [Y]_补=00001000=8\\\\ [X]_补+[Y]_补=01001000=72\\\\ [X+Y]_补=[X]_补+[Y]_补 [X]补=01000000=64[Y]补=00001000=8[X]补+[Y]补=01001000=72[X+Y]补=[X]补+[Y]补
例子1-2
已知 X = 78 , Y = − 100 , 求 X + Y = ? X=78,Y=-100,求X+Y=? X=78,Y=−100,求X+Y=?
[ X ] 补 = 01001110 = 78 [ Y ] 补 = 10011100 = − 100 [ X + Y ] 补 = 11101010 = − 22 [X]_补=0100 1110=78\\\\ [Y]_补=1001 1100=-100\\\\ [X+Y]_补=11101010=-22 [X]补=01001110=78[Y]补=10011100=−100[X+Y]补=11101010=−22
1.2.4 溢出及符号数扩展
在计算机内设有专门的溢出寄存器OF,1表示溢出,0表示无溢出
1.3 十进制数与字符的编码
1.3.1 BCD 码
- 8421码:8421码的单个数字位的0~9表达方法与二进制一致,>=10开始为非法码。名称来源于各个位置上的权重分别为8/4/2/1/
BCD码书写和组成方法与十进制下规则相同,即一位十进制对应四位BCD码
压缩BCD码:四位二进制表示8421
非压缩BCD码/扩展BCD码:八位二进制,低位为8421,高位没有意义,可取任何值 - BCD码运算
非法码/进位处理,溢出数加上6(或二进制的0110),以此跳过10~15的非法码
1.4 定点数与浮点数
1.4.1 定点数
定点数就是日常所用的写法,小数点在数中的位置是固定的,例如3.141
1.4.2 浮点数
任何一个十进制数可用下式表示(参考科学计数法):
N
=
1
0
E
∗
M
N=10^E*M
N=10E∗M
同理,任何一个二进制数可用下式表示:
N
=
2
E
∗
M
N=2^E*M
N=2E∗M
其中,2为二进制的基数,在数据中不出现;M称为尾数,即数的全部有效数字;E称为阶码,即小数点出现的位置
浮点数的格式如下所示:
阶符
+
阶码
E
→
尾符
+
尾数
M
阶符+阶码E→尾符+尾数M
阶符+阶码E→尾符+尾数M
其中阶符就是标志符
例子
已知尾数为4位,阶码为2位,阶符为1位,数符为1位,写出十进制数-2.5在计算机中的浮点表示形式?
首先将十进制数转写为二进制数, − 2.5 D = − 0.101 B ∗ 2 2 -2.5D=-0.101B*2^2 −2.5D=−0.101B∗22
负数,阶符 E f = 1 E_f=1 Ef=1
阶码为2, E = 10 E=10 E=10
尾数 M = 101 M=101 M=101
补齐四位0101
结果为10100 0101