1
第一章 基 础 知 识
数制
数制之间的转换
运算
原码 反码 补码
ASCII码
BCD码
数码之间的处理关系
从不同的角度看待一个二进制数
2
预 备 知 识
22=4 24=16 28=256 210=1024
220=1048576
1K= 210=1024 ( Kilo)
1M=1024K= 220 ( Mega)
1G=1024M= 230 ( Giga)
1个二进制位,bit( 比特)
8个二进制位,Byte( 字节) 1Byte=8bit
2个字节,Word( 字) 1Word=2Byte=16bit
3
1,数 制
十进制,基数为 10,逢十进一
543.12 =5× 102 + 4× 101 + 3× 100 + 1× 10-1 + 2× 10-2
二进制,基数为 2,逢二进一
1101112 = 1× 25 + 1× 24 + 1× 22 +1× 21 +1× 20 = 5510
十六进制,基数为 16,逢十六进一
1001,0001,1000,0111
9 1 8 7
= 9 × 163 + 1 × 162 + 8 × 161 + 7 × 160
八进制,基数为 8,逢八进一
4
数 制 基 数 数 码二进制 Binary 2 0,1
八进制 Octal 8 0,1,2,3,4,5,6,7
十进制 Decimal 10 0,1,2,3,4,5,6,7,8,9
十六进制 Hexadecimal 16 0,1,2,3,4,5,6,7,8,9,
A,B,C,D,E,F
5
二进制 十进制
110111.11B = 1× 25 + 1× 24 + 1× 22
+1× 21 +1× 20 +1× 2-1 +1× 2-2=55.75D
整数部分:除基取余法例,N = 55D
55/2=27 余数 =1(a0)
27/2=13 余数 =1(a1)
13/2=6 余数 =1(a2)
6/2=3 余数 =0(a3)
3/2=1 余数 =1(a4)
1/2=0 余数 =1(a5)
N = 55D=110111B
2,数制之间的转换
6
小数部分:乘基取整法例,N = 55D
0.425× 2=0.85 整数 =0
0.85× 2=1.70 整数 =1
0.70× 2=1.40 整数 =1
0.40× 2=0.80 整数 =0
0.80× 2=1.60 整数 =1
......
N =0.425D = 0.01101B
7
二进制 十六进制
0011 0101 1011 1111
3 5 B F
∴ 0011,0101,1011,1111B = 35BFH
A 1 9 C
1010 0001 1001 1100
∴ A19CH = 1010,0001,1001,1100B
8
十六进制 十进制
BF3CH = 11?163 + 15?162 + 3?161 + 12?160
降幂法 除法例,399D =? H
399 143 15
-? -? -?
256 16 1
1 8 F
∴ 399D = 18FH
9
算术运算二进制 加法规则 乘法规则
0+0=0 0?0=0
0+1=1 0?1=0
1+0=1 1?0=0
1+1=0 ( 进位 1) 1?1=1
十六进制
0 5 C 3 H 3 D 2 5 H
+ 3 D 2 5 H - 0 5 C 3 H
4 2 E 8 H 3 7 6 2 H
3,运算 (算术运算和逻辑运算)
10
逻辑运算(按位 bit操作)
,非,运算 ( NOT)
A?A
0 1
1 0
“与”运算( AND
)
A B A?B
0 0 0
0 1 0
1 0 0
1 1 1
“异或”运算( XOR)
A B A?B
0 0 0
0 1 1
1 0 1
1 1 0
“或”运算( OR)
A B A?B
0 0 0
0 1 1
1 0 1
1 1 1
11
例,X=00FFH Y=5555H,求 Z=X?Y=?
X= 0000 0000 1111 1111 B
Y= 0101 0101 0101 0101 B
Z= 0101 0101 1010 1010 B
Z=55AAH
12
4.原码 反码 补码
数 ( 机器数 ) 的表示:
计算机中的数用二进制表示,数的符号也用二进制表示 。
机器字长:指参与运算的数的基本位数,标志着计算精度,
一般是字节的整数倍 ( 8位,16位,32位等 ) 。
假设机器字长 n为 8位
7 6 5 4 3 2 1 0
符号位 数值位假设机器字长 n为 16位符号位 数值位
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
符号位 =0 表示正数符号位 =1 表示负数
13
常用表示法 —— 原码 反码 补码原码表示法,符号 + 绝对值例,n=8bit
[+3]原码 = 0 000,0011 = 03H
[ -3]原码 = 1 000,0011 = 83H
[+0]原码 = 0 000,0000 = 00H
[ -0]原码 = 1 000,0000 = 80H? 0的表示不唯一
14
反码表示法,正数的反码同原码,负数的反码数值位与原码相反例,n=8bit
[+5]反码 = 0 000,0101 = 05H
[ -5]反码 = 1 111,1010 = FAH
[+0]反码 = 0 000,0000 = 00H
[ -0]反码 = 1 111,1111 = FFH? 0的表示不唯一
15
补码表示法,IBM-PC采用补码表示法正数的补码:同原码 [+1]补码 = 0000 0001 = 01H
[+127]补码 = 0111 1111 = 7FH
[+0]补码 = 0000 0000 = 00H
负数的补码,( 1) 写出与该负数相对应的正数的补码
( 2) 按位求反
( 3) 末位加一例,机器字长 8位,[-46]补码 =?
[46]补码 = 0010 1110
1101 0001
1101 0010 = D2H
机器字长 16位,[-46]补码 = FFD2H
按位求反末位加一
16
[-1]补码 = 1111 1111 = FFH
[-127]补码 = 1000 0001 = 81H
[-0]补码 = 0000 0000 = 00H
n位补码的表数范围,- 2n-1? N? 2n-1-1
n=8 -128? N? 127
n=16 -32768? N? 32767
17
n位二进制补码的表数范围十进制 二进制 十六进制 十进制 十六进制
n=8 n=16
+127 0111 1111 7F +32767 7FFF
+126 0111 1110 7E +32766 7FFE
...,.,… …,..
+2 0000 0010 02 +2 0002
+1 0000 0001 01 +1 0001
0 0000 0000 00 0 0000
-1 1111 1111 FF -1 FFFF
-2 1111 1110 FE -2 FFFE
...,.,… …,..
-126 1000 0010 82 -32766 8002
-127 1000 0001 81 -32767 8001
-128 1000 0000 80 -32768 8000
18
补码的加法和减法求补运算?,对一个二进制数按位求反,末位加一
[X]补码? [-X]补码? [X]补码加法规则,[X+Y]补码 = [X]补码 + [Y]补码减法规则,[X-Y]补码 = [X]补码 + [-Y]补码补码减法可转换为补码加法符号位参加运算,能自动得到正确结果 。
无符号整数,表数范围 0? N? 2n-1
n=8 0? N? 255
n=16 0? N? 65535
19
ASCII码,用一个字节来表示一个字符,低 7位为字符的 ASCII值,最高位一般用作校验位 。
例,‘ A’ 41H
‘a’ 61H
‘1’ 31H
换行 0AH
回车 0DH
空格 20H
5,字符的 ASCII码
20
BCD码的表示:一位十进制的数用四位二进制数码来表示
6,BCD码例如,D BCD
0 0000
1 0001
2 0010
:
8 1000
9 1001
特点,每 4位表示是二进制的数,4位与 4位之间是十进制的数即用二进制的数码表示十进制的数。
例如,16= 0001 0110 BCD= 00010000B
98= 1001 1000 BCD
21
BCD码在机内存放形式:非压缩形式压缩形式
0000 1000
0000 1001
低高
1001 1000
BCD码的运算:
压缩的 BCD码的加法校正
22
例,37+47=84 37的 BCD码为 00110111B,47的
BCD为 01000111B
第一步,先进行二进制加法
00110111
+ 01000111
01111110
第二步,对二进制数的相加结果进行校正由于运算结果 01111110中的低 4位大于 9,故应在低四位加 6
01111110
+00000110
10000100
最终结果为 84H,既是 84D的 BCD码,结果正确 。
23
压缩的 BCD码的减法校正例,84-47=37 84的 BCD码 ( 压缩 ) 为 10000100B、
47的 BCD( 压缩 ) 为 01000111B
第一步,先进行二进制减法
10000100
- 01000111
00111101
第二步,对二进制数的相减结果进行校正由于在运算中低 4位向高 4位借了 1,故应在低四位减 6
00111101
-00000110
00110111
最终结果为 37H,既是 37D的 BCD码,结果正确。
24
非压缩的 BCD码的加法校正例 1.3.3 37+47=84
第一步,先进行二进制加法
0000001100000111
+ 0000010000000111
0000011100001110
第二步,对二进制数的相加结果进行校正由于运算结果中的低字节的低 4位大于 9,故应加
6,而有辅助进位位,直接将这一进位位加到高字节 。
0000011100001110
+ 1 110
0000100000000100
25
最终结果为 84H,既是 84D的 BCD码,结果正确 。
非压缩的 BCD码的减法校正例 1.3.4 84-47=37
第一步,先进行二进制减法
0000100000000100
- 0000010000000111
0000001111111101
第二步,对二进制数的相减结果进行校正由于在运算后,低字节的低 4位大于 9,所以应减
6。
0000001111111101
- 110
0000001111110111
26
然后将结果的低字节的高四位清 0,结果为 0307H,是
37D的非压缩的 BCD码,结果正确 。
BCD码的乘法校正例,6× 7=42
第一步,先进行二进制乘法
00000110
× 00000111
110
1100
11000
00101010
第二步,对二进制数的相成结果进行校正
00101010÷ 1010=00000100余 00000010
27
校正的实质是对二进制数的乘积除以 10D,商为乘积的高位,余数为乘积的低位,故最终结果为
42D。
BCD码的除法校正例,45÷ 7=6余 3
BCD码的除法与加,减,乘不同,是先校正,
再做二进制除 。 校正的实质是将被除数 ( 十进制数 ) 转换为二进制数 。 如上例,将 45的高位乘以
10D再加上低位转换为二进制数 。
第一步,先校正
00000100× 1010+00000101=0000000000101101
第二步,作除法
0000000000101101÷ 00000111=00000110余
00000011
28
结果为 6余 3。
在 Intel8088/8086中,有专门的 BCD码校正指令来完成校正操作 。
29
数的输入:
每位二进制数用 ASCII码输入 BCD码存放 二进制数值存放减 30H 十转二处理用十进制调整指令数的输出:
二进制数 BCD ASCII码 按位输出二转十
(除 10取余直至商为 0)
各位加 30H
非压缩
7.数码之间的处理关系
30
一个二进制数在计算机中有着深刻的意义 。 从不同的 角 度 看 可 以 有 不 同 的 解 释 。 例 如 同 是
00110010B,即 32H。 可看成是字符,2” 的 ASCII
码;可以看成是 32D的压缩的 BCD码;也可以看成是 50D的二进制表示;既是无符号数 50D,又是
50D的补码;也可以看成是一个地址的偏移量;
又可以看成是一个指令的机器码等等 。
8.从不同的角度看待一个二进制数
第一章 基 础 知 识
数制
数制之间的转换
运算
原码 反码 补码
ASCII码
BCD码
数码之间的处理关系
从不同的角度看待一个二进制数
2
预 备 知 识
22=4 24=16 28=256 210=1024
220=1048576
1K= 210=1024 ( Kilo)
1M=1024K= 220 ( Mega)
1G=1024M= 230 ( Giga)
1个二进制位,bit( 比特)
8个二进制位,Byte( 字节) 1Byte=8bit
2个字节,Word( 字) 1Word=2Byte=16bit
3
1,数 制
十进制,基数为 10,逢十进一
543.12 =5× 102 + 4× 101 + 3× 100 + 1× 10-1 + 2× 10-2
二进制,基数为 2,逢二进一
1101112 = 1× 25 + 1× 24 + 1× 22 +1× 21 +1× 20 = 5510
十六进制,基数为 16,逢十六进一
1001,0001,1000,0111
9 1 8 7
= 9 × 163 + 1 × 162 + 8 × 161 + 7 × 160
八进制,基数为 8,逢八进一
4
数 制 基 数 数 码二进制 Binary 2 0,1
八进制 Octal 8 0,1,2,3,4,5,6,7
十进制 Decimal 10 0,1,2,3,4,5,6,7,8,9
十六进制 Hexadecimal 16 0,1,2,3,4,5,6,7,8,9,
A,B,C,D,E,F
5
二进制 十进制
110111.11B = 1× 25 + 1× 24 + 1× 22
+1× 21 +1× 20 +1× 2-1 +1× 2-2=55.75D
整数部分:除基取余法例,N = 55D
55/2=27 余数 =1(a0)
27/2=13 余数 =1(a1)
13/2=6 余数 =1(a2)
6/2=3 余数 =0(a3)
3/2=1 余数 =1(a4)
1/2=0 余数 =1(a5)
N = 55D=110111B
2,数制之间的转换
6
小数部分:乘基取整法例,N = 55D
0.425× 2=0.85 整数 =0
0.85× 2=1.70 整数 =1
0.70× 2=1.40 整数 =1
0.40× 2=0.80 整数 =0
0.80× 2=1.60 整数 =1
......
N =0.425D = 0.01101B
7
二进制 十六进制
0011 0101 1011 1111
3 5 B F
∴ 0011,0101,1011,1111B = 35BFH
A 1 9 C
1010 0001 1001 1100
∴ A19CH = 1010,0001,1001,1100B
8
十六进制 十进制
BF3CH = 11?163 + 15?162 + 3?161 + 12?160
降幂法 除法例,399D =? H
399 143 15
-? -? -?
256 16 1
1 8 F
∴ 399D = 18FH
9
算术运算二进制 加法规则 乘法规则
0+0=0 0?0=0
0+1=1 0?1=0
1+0=1 1?0=0
1+1=0 ( 进位 1) 1?1=1
十六进制
0 5 C 3 H 3 D 2 5 H
+ 3 D 2 5 H - 0 5 C 3 H
4 2 E 8 H 3 7 6 2 H
3,运算 (算术运算和逻辑运算)
10
逻辑运算(按位 bit操作)
,非,运算 ( NOT)
A?A
0 1
1 0
“与”运算( AND
)
A B A?B
0 0 0
0 1 0
1 0 0
1 1 1
“异或”运算( XOR)
A B A?B
0 0 0
0 1 1
1 0 1
1 1 0
“或”运算( OR)
A B A?B
0 0 0
0 1 1
1 0 1
1 1 1
11
例,X=00FFH Y=5555H,求 Z=X?Y=?
X= 0000 0000 1111 1111 B
Y= 0101 0101 0101 0101 B
Z= 0101 0101 1010 1010 B
Z=55AAH
12
4.原码 反码 补码
数 ( 机器数 ) 的表示:
计算机中的数用二进制表示,数的符号也用二进制表示 。
机器字长:指参与运算的数的基本位数,标志着计算精度,
一般是字节的整数倍 ( 8位,16位,32位等 ) 。
假设机器字长 n为 8位
7 6 5 4 3 2 1 0
符号位 数值位假设机器字长 n为 16位符号位 数值位
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
符号位 =0 表示正数符号位 =1 表示负数
13
常用表示法 —— 原码 反码 补码原码表示法,符号 + 绝对值例,n=8bit
[+3]原码 = 0 000,0011 = 03H
[ -3]原码 = 1 000,0011 = 83H
[+0]原码 = 0 000,0000 = 00H
[ -0]原码 = 1 000,0000 = 80H? 0的表示不唯一
14
反码表示法,正数的反码同原码,负数的反码数值位与原码相反例,n=8bit
[+5]反码 = 0 000,0101 = 05H
[ -5]反码 = 1 111,1010 = FAH
[+0]反码 = 0 000,0000 = 00H
[ -0]反码 = 1 111,1111 = FFH? 0的表示不唯一
15
补码表示法,IBM-PC采用补码表示法正数的补码:同原码 [+1]补码 = 0000 0001 = 01H
[+127]补码 = 0111 1111 = 7FH
[+0]补码 = 0000 0000 = 00H
负数的补码,( 1) 写出与该负数相对应的正数的补码
( 2) 按位求反
( 3) 末位加一例,机器字长 8位,[-46]补码 =?
[46]补码 = 0010 1110
1101 0001
1101 0010 = D2H
机器字长 16位,[-46]补码 = FFD2H
按位求反末位加一
16
[-1]补码 = 1111 1111 = FFH
[-127]补码 = 1000 0001 = 81H
[-0]补码 = 0000 0000 = 00H
n位补码的表数范围,- 2n-1? N? 2n-1-1
n=8 -128? N? 127
n=16 -32768? N? 32767
17
n位二进制补码的表数范围十进制 二进制 十六进制 十进制 十六进制
n=8 n=16
+127 0111 1111 7F +32767 7FFF
+126 0111 1110 7E +32766 7FFE
...,.,… …,..
+2 0000 0010 02 +2 0002
+1 0000 0001 01 +1 0001
0 0000 0000 00 0 0000
-1 1111 1111 FF -1 FFFF
-2 1111 1110 FE -2 FFFE
...,.,… …,..
-126 1000 0010 82 -32766 8002
-127 1000 0001 81 -32767 8001
-128 1000 0000 80 -32768 8000
18
补码的加法和减法求补运算?,对一个二进制数按位求反,末位加一
[X]补码? [-X]补码? [X]补码加法规则,[X+Y]补码 = [X]补码 + [Y]补码减法规则,[X-Y]补码 = [X]补码 + [-Y]补码补码减法可转换为补码加法符号位参加运算,能自动得到正确结果 。
无符号整数,表数范围 0? N? 2n-1
n=8 0? N? 255
n=16 0? N? 65535
19
ASCII码,用一个字节来表示一个字符,低 7位为字符的 ASCII值,最高位一般用作校验位 。
例,‘ A’ 41H
‘a’ 61H
‘1’ 31H
换行 0AH
回车 0DH
空格 20H
5,字符的 ASCII码
20
BCD码的表示:一位十进制的数用四位二进制数码来表示
6,BCD码例如,D BCD
0 0000
1 0001
2 0010
:
8 1000
9 1001
特点,每 4位表示是二进制的数,4位与 4位之间是十进制的数即用二进制的数码表示十进制的数。
例如,16= 0001 0110 BCD= 00010000B
98= 1001 1000 BCD
21
BCD码在机内存放形式:非压缩形式压缩形式
0000 1000
0000 1001
低高
1001 1000
BCD码的运算:
压缩的 BCD码的加法校正
22
例,37+47=84 37的 BCD码为 00110111B,47的
BCD为 01000111B
第一步,先进行二进制加法
00110111
+ 01000111
01111110
第二步,对二进制数的相加结果进行校正由于运算结果 01111110中的低 4位大于 9,故应在低四位加 6
01111110
+00000110
10000100
最终结果为 84H,既是 84D的 BCD码,结果正确 。
23
压缩的 BCD码的减法校正例,84-47=37 84的 BCD码 ( 压缩 ) 为 10000100B、
47的 BCD( 压缩 ) 为 01000111B
第一步,先进行二进制减法
10000100
- 01000111
00111101
第二步,对二进制数的相减结果进行校正由于在运算中低 4位向高 4位借了 1,故应在低四位减 6
00111101
-00000110
00110111
最终结果为 37H,既是 37D的 BCD码,结果正确。
24
非压缩的 BCD码的加法校正例 1.3.3 37+47=84
第一步,先进行二进制加法
0000001100000111
+ 0000010000000111
0000011100001110
第二步,对二进制数的相加结果进行校正由于运算结果中的低字节的低 4位大于 9,故应加
6,而有辅助进位位,直接将这一进位位加到高字节 。
0000011100001110
+ 1 110
0000100000000100
25
最终结果为 84H,既是 84D的 BCD码,结果正确 。
非压缩的 BCD码的减法校正例 1.3.4 84-47=37
第一步,先进行二进制减法
0000100000000100
- 0000010000000111
0000001111111101
第二步,对二进制数的相减结果进行校正由于在运算后,低字节的低 4位大于 9,所以应减
6。
0000001111111101
- 110
0000001111110111
26
然后将结果的低字节的高四位清 0,结果为 0307H,是
37D的非压缩的 BCD码,结果正确 。
BCD码的乘法校正例,6× 7=42
第一步,先进行二进制乘法
00000110
× 00000111
110
1100
11000
00101010
第二步,对二进制数的相成结果进行校正
00101010÷ 1010=00000100余 00000010
27
校正的实质是对二进制数的乘积除以 10D,商为乘积的高位,余数为乘积的低位,故最终结果为
42D。
BCD码的除法校正例,45÷ 7=6余 3
BCD码的除法与加,减,乘不同,是先校正,
再做二进制除 。 校正的实质是将被除数 ( 十进制数 ) 转换为二进制数 。 如上例,将 45的高位乘以
10D再加上低位转换为二进制数 。
第一步,先校正
00000100× 1010+00000101=0000000000101101
第二步,作除法
0000000000101101÷ 00000111=00000110余
00000011
28
结果为 6余 3。
在 Intel8088/8086中,有专门的 BCD码校正指令来完成校正操作 。
29
数的输入:
每位二进制数用 ASCII码输入 BCD码存放 二进制数值存放减 30H 十转二处理用十进制调整指令数的输出:
二进制数 BCD ASCII码 按位输出二转十
(除 10取余直至商为 0)
各位加 30H
非压缩
7.数码之间的处理关系
30
一个二进制数在计算机中有着深刻的意义 。 从不同的 角 度 看 可 以 有 不 同 的 解 释 。 例 如 同 是
00110010B,即 32H。 可看成是字符,2” 的 ASCII
码;可以看成是 32D的压缩的 BCD码;也可以看成是 50D的二进制表示;既是无符号数 50D,又是
50D的补码;也可以看成是一个地址的偏移量;
又可以看成是一个指令的机器码等等 。
8.从不同的角度看待一个二进制数