资源描述
*
微机组成:CPU、MEM、I/O
微机的基本结构
微机原理(一):
第一章 数制和码制
§1.1 数制 (解决如何表示数值的问题)
一、数制表示
1、十进制数
表达式为:A =
如:(34.6)10 = 3×101 + 4×100 + 6×10-1
2、X进制数
表达式为:B =
如:(11.01)2 = 1×21 + 1×20 + 0×2-1+ 1×2-2
(34.65)16 = 3×161 + 4×160 + 6×16-1+ 5×16-2
X进制要点:X为基数,逢X进1,Xi为权重。(X个数字符号:0,1,…,X-1)
区分符号:D-decimal (0-9),通常D可略去,
B-binary (0-1), Q-octal (0-7), H-hexadecimal (0-9, A-F)
常用数字对应关系:
D: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12, 13,14,15
B:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
H: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
二、数制转换
1、X → 十
方法:按权展开,逐项累加。
如: 34.6 Q = 3×81 + 4×80 + 6×8-1 = 24 + 4 + 0.75 = 28.75 D
2、十 → X
即:A十进制 = B X进制
令整数相等,即得:A整数 =(BN-1·XN-1 + … + B1·X1 )+ B0·X0
此式一次除以X可得余数B0,再次除以X可得B1,…,如此直至得到BN-1
令小数相等,即得:A小数 = B-1·X-1 +( B-2·X-2 + … + B-M·X-M )
此式一次乘X可得整数B-1,再次乘X可得B-2,…,如此直至得到B-M.
归纳即得转换方法:除X取余,乘X取整。 (适用于任意进制转换)
如:十 → 二: 25.375 D = 11001.011 B
2 | 2 5 · 2 x 0.375 ·
1 2 1 x 0.750 0
6 0 x 1.50 1
3 0 x 1.00 1
1 1 0
0 1
十 → 八:346.152 D = 532.1157 Q (“四舍五入”改为“到半进一”)
8 | 3 4 6 · 8 x 0.152 ·
4 3 2 x 1.216 1
5 3 x 1.728 1
0 5 x 5.824 5
x 6.592 6
x 4.736 4
……
3、二 十六 ,二 八 (简捷方法)
方法:四合一,一分四;三合一,一分三。 自小数点开始:←·→
如:
二 → 十六:1011011.011001 B = 0101 1011.0110 0100B = 5B.64 H
十六 → 二:3A.5D H = 0011 1010.0101 1101 B
二 → 八: 1011011.011001 B = 001 011 011.011 001 B = 133.31 Q
八 → 二:46.15 Q = 100 110.001 101 B
三、数的运算
1、算术运算
加减乘除
如: 00110110 10011011 11 0011
+ 01000111 - 01010110 ×10 011/ 1010
01111101 01000101 00 011
+ 11 100
110 011
10
2、逻辑运算
与或异非
如: 01110110 10010011 10000011
AND 01000111 OR 01010010 XOR 01010010 NOT 10010011
01000110 11010011 11010001 01101100
算法: 有0得0 有1得1 相同得0 每位取反
常用于:按位清0 按位置1 整体清0 整体取反
四、BCD和ASCII
1、BCD:二进制编码的十进制数
即:十进制数的每一位用4位二进制数表示。
优点:比二进制更直观,机器可识别。
缺点:运算麻烦,需调整。
如: 36.9 = (0011 0110.1001)BCD
(0011 1001)BCD = 39 , 注意:前者 ≠ 00111001B = 57
分为:组合BCD (每字节放两位),如:35 =(0011 0101)BCD
分离BCD(每字节放一位),如:47 =(xxxx 0100 xxxx 0111)BCD
用BCD码运算时,结果要进行调整(否则,结果可能有误):
加法调整:加6调整 (Di有进位吗?Di>9吗?)
如: 0001 1001 19 0011 0110 36 BCD码
+ 0100 1000 48 + 0100 0111 47 BCD码
0110 0001 61 (有进位) 0111 1101 7D ( >9 ) 非BCD码
+ 0000 0110 06 + 0000 0110 06 调整
0110 0111 67 1000 0011 83 变回BCD码
减法调整:减6调整 (Di有借位吗?)
如: 0110 0101 65 BCD码
- 0011 0111 37 BCD码
0010 1110 2E (有借位) 非BCD码
- 0000 0110 06 调整
0010 1000 28 变回BCD码
2、ASCII:字符代码
(即用7位二进制数表示常用的字符,共27=128个。第8位通常用作校验位。)
如: ′R′= 52H = 1010010B
′0~9′= 30H~39H, ′A~Z′= 41H~5AH,′+′= 2BH
若加校验位(ASCII共8位),则:
偶校验:补一校验位,使1的总个数为偶数。
如:加偶校验后,R的ASCII = 11010010B
奇校验:补一校验位,使1的总个数为奇数。
如:加奇校验后,R的ASCII = 01010010B
§1.2 码制 (解决如何表示有符号数的问题)
机器数:将符号数字化,并与数值结合在一起,形成的(适于机器识读的)有符号数。
真 值:机器数的实际数值(即符号没经数字化的有符号数)。
一、原码和补码
1、原码 (积)
定义:设 |X| = Xn-2…X1 X0, 则
[X]原 = 0 Xn-2…X1 X0, 当X≥0
[X]原 = 1 Xn-2…X1 X0, 当X≤0
如:X1 = +1001010 则[X1]原 = 01001010
X2 = -1001010 则[X2]原 = 11001010
原码真值范围:[1 1…1,0 1…1] , 即:[最小,最大]
8位原码的真值范围:[1 1111111,0 1111111],即:-127 ~ +127
2、补码 (和)
同余概念:a +NK = a (mod K)
(同余数相差模,同模内则唯一。类似于:生日)
补码定义: (n位补码,mod 2n)
[X]补 = X, 当0≤X<2n-1
[X]补 = 2 n+X, 当-2n-1≤X<0 (编码)
补码实质,即:
[X]补=0-|X|= * *…* = D- + D+ ,(X<0) (即代数和)
可见:正数的补码同原码,负数才有求补问题。
以2n为模,称2补码。
n位补码的真值范围:[1 0…0,0 1…1] ,即:[-2n-1,+2n-1-1]
8位补码的真值范围:[1 0000000,0 1111111],即:-128 ~ +127
补码求法:
①、按定义求:
[X]补 = 2 n + X, X<0
如:X = -1001010B,n=8, 则
[X1]补= 2 8 + (-01001010B)
= 100000000B - 1001010B = 10110110B (减法不方便)
或:[X1]补= 0-|X|=00000000B-01001010B=10110110B (结果相同)
②、由原码求:
[X]补 = [X]原 符号位不变,其余取反加1
*推导:设 X =-Xn-2…X1 X0, (X<0), 则
[X]原 = 2n-1 + Xn-2…X1 X0,
[X]补 = 2 n + X = 2n-1 + 2n-1 + X
= 2n-1 + (1…1 + 1) + X = 2n-1 + (1…1-|X|) + 1
= 2n-1 + + 1
= [X]原符号不变、其余取反+1
如: X = -1001010B,n=8, 则
[X]原 = 11001010B
[X]补 = 10110101B+1 = 10110110B (原码→补码,更容易求)
补码→原码:
[[X]补]补 = [X]原
如:[X]补 = 10110110B, 则
[X]原 = [[X]补]补 = 11001001B+1 = 11001010B
补码→真值:
① 由补码变到原码,再得出真值
(正数:原码=补码;负数:原码=补码的符号位不变、其余取反+1)
如:[X1]补 = 00110110B, 则,
[X1]补真值= +0110110B = +54
[X2]补 = 10110100B, 则
[X2]原 = [[X2]补]补 = 11001011B+1 = 11001100B
[X2]补真值 = -1001100B = -76
② 直接按正负代数和计算,得出真值
如:[X2]补 = 10110100B, 则
[X2]补真值 = -2 7 + 0110100B = -128+52 = -76
求负运算:
设 [Y]补 = Yn-1…Y1 Y0, 则
[-Y]补= + 1 ( 即:求负=取反+1, 易证:0-X=X反+1)
补码运算:
[X+Y]补 = [X]补 +[Y]补 , (mod 2n) ; (前后同余,不溢则同模)
[X-Y]补 = [X]补 -[Y]补 = [X]补+[-Y]补
如:00100100B+11110001B=00010101B
即:[36]补+[-15]补= [21]补
溢出判别:( 溢出即超出了补码的真值范围:[-2n-1,+2n-1-1] )
*推导如下:(易知:正+负√ 负+正√ 正+正? 负+负?)
00110000 [ +48]补 10100000 [ -96]补
+ 10000000 [-128]补 + 01110000 [+112]补
10110000 [ -80]补√(进位00) 00010000 [ +16]补√(进位11)
01000000 [ +64]补 10010000 [-112]补
+ 01010000 [ +80]补 + 10100000 [ -96]补
10010000 [-112]补×(进位01) 00110000 [ +48]补×(进位10)
二、定点数和浮点数 (解决如何使数值范围足够大的问题)
1、定点数:小数点位置固定(隐含)。 (特点:格式简单、真值范围小)
① 约定小数点在最高数值位之前,则为纯小数。
格式:1位符号位·n位数值位 (原码)
真值范围:[-(1-2-n),+(1-2-n)],即:[-0.1…1,+0.1…1 ]
绝对值:最大值为1-2-n,最小值为2-n
如:纯小数定点数01001101B,真值为+0.1001101B
纯小数定点数10010010B,真值为-0.0010010B
② 约定小数点在最低数值位之后,则为纯整数。
格式:1位符号位,n位数值位· (原码)
真值范围:[-(2n-1),+(2n-1],即:[-01…1,+01…1 ]
绝对值:最大值为2n-1,最小值为1
如:纯整数定点数01001111B,真值为+01001111B
纯整数定点数11010000B,真值为-01010000B
上溢:计算结果的绝对值大于定点数最大绝对值。
下溢:计算结果的绝对值小于定点数最小绝对值。
实际数并非都是纯整数或纯小数,因此运算时需选择“比例因子”,以化成纯整数或纯小数,并要防止结果“上溢”或“下溢”。
2、浮点数:由阶码和尾数表示(小数点浮动)。(特点:格式复杂、真值范围大)
其中,阶码是纯整数,尾数是纯小数。E和F可用原码或补码。真值小数点的实际位置由阶符和阶码决定,因此是浮动的。
对应真值:N = F×2 E = ±d×2 ±P
真值范围:[-(1-2-n)· ,+(1-2-n)·] (范围远大于定点数)
绝对值:最大值为(1-2-n)·,最小值为2-n·
规格化浮点数:尾数(绝对值)首位为1的浮点数。(这样有效位数最多)
比较:0.1110011B×24 和0.0001110B×27 ,显然前者有效位数多。
例:设X = -13.5625,请用规格化浮点数表示(假定E用8位原码,F用16位补码)。
解:X = -13.5625 = -1101.1001B = (-0.11011001B)×2 +4
E = +4 = 00000100B (8位原码,纯整数)
F = -0.11011001B = -0.110 1100 1000 0000 B (扩至16位)
= 10010011 10000000 B (16位补码,纯小数)
故X的规格化浮点数为:00000100 10010011 10000000B
*另外,若F用补码,则有如下形式:
正数:+0.1* … *, F=01* … * ; ( +0.5≤X<+1 )
负数:-0.1* … *, F=10x … x ; (-1<X<-0.5 )
如:(+0.1010011B)补码 = 01010011B
(-0.1010011B)补码 = 10101101B
显然,首位可省去,符号仍明确,但尾数可多一位(精度更高)。
浮点数在加减之前,先要对阶(即对齐小数点)。
对阶规则:阶码小的尾数右移(每右移1位,阶码加1),直至两数阶码相等为止。
* 计算机中的数串可代表:有符号数、无符号数、BCD、ASCII、原码、补码、定点数、浮点数、指令代码等。究竟是何含义,由编程者约定。
看作无符号数,加法时可能有进位,减法时可能有借位。进位或借位是结果的一部分。
看作有符号数,进位或借位不是结果,但可用于判断结果是否溢出。
不管是无符号数运算还是有符号数运算,计算机都会把进位或借位情况保存在CF,溢出标志保存在OF,供编程者使用。
本章小结
◆ 十、二、十六进制数的表示方法和相互转换
◆ 二进制数的算术运算和逻辑运算规则
◆ BCD码的表示和运算规则,ASCII的表示及校验设置
◆ 有符号数的原码、补码表示法,补码运算规则及溢出判别
◆ 定点数、浮点数的表示及含义
习题一
1、十进制 → 二进制:73.8125 =
2、十进制 → 十六进制:299.34375 =
3、二进制 → 十进制:10010010.001B =
4、十六进制→ 十进制:8F.7H =
5、已知:a = 1011B, b = 11001B, c = 100110B, 用二进制完成下列算术运算,并用十进制运算检查结果:
(1) a+b; (2) c-a-b; (3) a×b; (4) c/a 。
6、已知:a = 00111000B, b = 11000111B, 试求以下逻辑运算结果:
(1) a AND b ; (2) a OR b ; (3) a XOR b ; (4) NOT a 。
7、写出下列各数的8位原码和补码:
(1) +1010101B; (2) -1010101B; (3) +1111111B; (4) -1111111B;
(5) +1000000B; (6) -1000000B; (7) +34 ; (8) -69 。
8、对下列8位补码分别进行a+b和a-b运算,并判断结果是否溢出:
(1) a = 37H, b = 57H; (2) a =0B7H, b =0D7H ;
(3) a =0F7H, b =0D7H; (4) a = 37H, b =0C7H 。
9、将下列十进制数用BCD表示,并用加6修正法求运算结果:
(1) 38+42; (2) 56+77; (3) 99+88; (4) 34+69 。
10、将下列字符串用ASCII表示(以十六进制形式):
(1) SAM JONES; (2) -75.61 。
11、用规格化浮点数表示(设阶为4位原码,尾为8位补码):-3.125 =
- 8 -
展开阅读全文