1. 基础知识
对于二进制数和十六进制数的表达和运用要在本课程达到透彻掌握。
1.1 进位计数制和数制转换
1.1.1 进位计数制
“进位计数”是人类文明进程的重要一步,“非进位计数”十分繁琐(见扫描图2张)。 1. 十进制、二进制、十六进制
10进制:10个数码,逢十进一 ;人类最习惯的进制,习惯到不习惯别的进制。 2进制: 2个数码,逢二进一 ;最初用来表示电路状态,进而实现了进位和计算。 16进制:16个数码,逢十六进一 ;为了简化表达二进制数,一位对四位。
8进制: 8个数码,逢八进一 ;也是为了简化表达,一位对三位。(现在基本不用)
规律:N进制,有N个数码,逢N进一
2. 基数与位权 基数:数码个数;
10进制数码:0、1、2、3、4、5、6、7、8、9; 2进制数码:0、1;
16进制数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F; 8进制数码:0、1、2、3、4、5、6、7。 推广:N进制,有N个数码。
位权:某位上的单位数字所代表的值,常用“基数”表示;
第四位 第三位 第二位 整数最低位 第一位小数 第二位小数 10进制数位权:
103
102
101
100 20 =1 160
101
-
K
102
-
2进制数位权: 23 =8 22 =4 21 =2 16进制数位权: 163 8进制数位权: 83
3
2
-1
=0.5 22 =0.25
--
162 161 161 162
--
-
82 81 80 81 82
2
1
0
-1
-2
N进制数位权: N N N N N N
注意:十进制是最普及的数据形式,因此各种计数制的位权的展开表达一般都用十进制数形式。 3. 数制标识 两种标识方法:
下标法: 数据结尾加下标 12316 11110 1112
尾符法: D(Decimal)、B(Binary)、O或Q(Octal)、H(Hexadecimal)
1.1.2 二──十进制转换
1. 2进制转10进制 唯一方法:按权展开求和。
8086汇编语言程序设计
了解位权,可以对任何计数制的一个数通过每位按权展开求和得到其对应的十进制数值。例如: 16进制数0123H=0×163+1×162+2×161+3×160=0+256+32+3=291 2进制数1010 0101B=1×27+0×26+1×25+0×24+0×23+1×22+0×21+1×20
=128+0+32+0+0+4+0+1=165
2. 10进制转2进制 整数部分:除2取余法。
小数部分:乘2取整法。
(降幂法:用于16位以内的2进制数尚可,位数再多就不好用了。)
要求:对16位以内2进制数的位权熟练掌握,达到心算自如。对几个特殊数据掌握规律: D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20 32768 16384 8192 4096 2048 1024 512 256 128 64 32 16 8 4 2 1 注意规律: 第N+1位2进制数的位权等于其前面(右侧)所有位的位权之和+1。
1.1.3 十六进制数及其转换
1. 16进制数——仅仅用于人际交流的时候对2进制数的简化表达(书写)。 为了简化对2进数的书写、记忆和交流,将4位2进制数用一个数码表示。 由于4位2进制数能表示的数据范围是0~15共16个数,所以要设计(指定)出16个数码符号。
同2进制数一样,不仅仅是一种表示方法,而且能够按16进制规律进行运算,所以称为16进制数。
2. 2──16转换
4位对1位直接转换,前提是对4位2进制数的位权(8、4、2、1)烂熟于心。 3. 10──16转换 16转10:按权展开求和。
10转16:只能用除16 取余,比较繁琐,也用不到。 (实用方法是以2进制为过渡:10进——2进——16进。)
2进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0加1等于1 1加0等于1
2
16进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 1.2 二进制和十六进制运算
1.2.1 二进制数的运算
2进制数的设置不仅仅解决了电路的状态表达,而且使得运算规则简化,便于电路的实现。
加法口诀4句:0加0等于0
8086汇编语言程序设计
1加1等于10 (向高位进位)
乘法口诀4句:0乘0等于0
0乘1等于0 1乘0等于0 1乘1等于1
1.2.2 十六进制数的运算
了解加减即可,牢记逢16进1,没有实际用途。乘除更不常用,仅仅说明运算规则是成立的。 例题1.4 1234H+5678H
例题1.5 369CH ×3
1234H 0001 0010 0011 0100 + 5678H + 0101 0110 0111 1000 68ACH 0110 1000 1010 1100
369CH ;C×3=12×3=36,进位2带走32,剩4 × 3 ;9×3=27,加进位2=29,进位1带走16,剩13=D A3D4H ;6×3=18,加进位1=19,进位1带走16,剩3 ;3×3=9,加进位1=10=A 1.3 计算机中数和字符的表示
1.3.1 数的编码
仅仅有了2进制的形式还不能完整表达数值信息,因为实际问题中的数据不仅有大小,还有正负、小数等特征。按照一定的规则将数值的大小、正负、小数都表示出来的数据形式称为机器数,表示规则就是编码。
机器数的范围由数据的2进制位数决定,8位、16位、32位、64位、…; 正负号用一个数据位表示,即将符号也数字化,符号占最高位,0正1负;
机器码:为了便于运算,对于有符号的数要按一定的编码规则编码,称为机器码。最常用的是原码、反码、补码的编码方案。
规定:正数──原码=反码=补码=符号位0+绝对值 负数──原码=符号位1+绝对值
反码=原码符号位1不变,其余位按位取反 补码=反码+1
原则:计算机中一切有符号数都是以补码形式存储的(只不过正数的补码与原码相同,负数则不同)。 负数补码的定义:[-X]补=2-|-X| 即:一个负数的N位补码等于N位的进位值(满度值)与负数绝对值之差。换言之,一个N位负数的原码、补码之和是N位数的进位值(满度值)。
从定义可见:可见机器码与数据位数有很大关系:
8位补码 =28 -|-X|=256-|-X| -3的8位补码为1111 1100B = FCH
16位补码 =216 -|-X|=65536-|-X| -3的16位补码为1111 1111 1111 1100B =FFFCH
3
N
8086汇编语言程序设计
实用求补方法有二:负数的绝对值连符号位一起求反加1; 负数原码不连符号位求反加1。
规定:1000 0000或1000 0000 0000 0000为-128或-32768的补码。(从-127推导)
补码的符号扩展:把一个8位补码拉长为16位,不能高位补0(符号位补0成了正数),而是补充符号位! 典型补码:(重点在:+0、-0、-1、-127、-128)
8位无号数的数值范围:0~255 8位有号数的数值范围:-128~+127 16位无号数的数值范围:0~65535 16位有号数的数值范围:-32768~+32767
通用表示:
N位无号数的表示范围为 0~2N-1 N位有号数的表示范围为 -2N-1~+2N-1-1
(谈到几位数当然是从1位开始,上述的N就是这个含义。只有谈到第几位数的时候才从0开始算起。)
1.3.2 补码加法与减法
求补运算:对一个2进制数按位取反,末尾加1。
(注意:求补运算与求一个负数的补码有区别,求补运算不考虑数据的正负,用于消化或提出负号。) 补码的特性: [X]补 → [-X]补 → [X]补
可以看出,对一个2进制数进行一次求补运算,相当于提出/变换一次符号。由于这个规律,使得机器进行加减运算的时候,无需区别符号和减号,一律按加法进行,符号位参与运算。运算结果永远是补码,但是结果的符号位为0就是正数,正数的补码原码相同。如果结果的符号位为1,那就是负数。人在查看内存单元中的数据时,如果看到了一个负数,那就不是“真值”而是补码,需要进行一次求补运算(提出符号、剩下原码)才能看出“真值”。(所以求补运算就是查看机器内的一个负数时必需要进行的转换。)
例题1.6 —19
1.3.3 无符号整数
在非计算的场合使用2进制数据,往往是无符号的,比如地址、序号、字符编码等信息。 8位——1字节整数,可以表达数据范围0-255,共256个数。
16位——2字节正数(1个字),可以表达数据范围0-65535,共65536个数。
1.3.4 字符表示法
字符在计算机内采用了2进制数字化表示。
美国人设计的计算机,所以字符的2进制编码当然采用了美国标准信息交换码(ASCII码)。
原始的电报、打字机、计算机键盘上的符号只有80多个,用2进制数来编码,只需7位机足矣。但是计算
4

