作为汇编语言的课程笔记,方便之后的复习与查阅
本篇为课程第二次课内容
目录
整数
原码:无符号数的表示
用全部字长来表示数值大小,如unsigned char
的取值范围是0~255
(
2
8
−
1
2^8-1
28−1)。由此可见,相同位数的有符号数和无符号数表示的取值范围不同
补码:有符号数的表示
如果要表示有符号数,可以将最高位定义为符号位,0
为正数,1
为负数
但此时,如果继续用原码形式来表示有符号数就会出现如下问题:
- 1 表示为 0000 0001,-1 表示为 1000 0001
- 1 + (-1) = 1000 0010 = -2 显然不正确
因此,人们发明了补码:
- 若 x > 0,则补码、反码、原码一样
- 若 x < 0,则补码=反码+1
n位补码表示的数值范围是: − 2 n − 1 -2^{n-1} −2n−1 ~ + 2 n − 1 − 1 +2^{n-1} -1 +2n−1−1,对应的补码为 1,000 0000 ~ 0,111 1111
通过补码,可以使减法运算用补码相加再求补的方法进行
小数
定点数
约定所有数值数据的小数点隐含在某一个固定位置上,称为定点数
通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为定点整数
- 不足:定点数表达法形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。
最终,绝大多数现代的计算机系统采纳了浮点数表达方式。
浮点数
浮点数表示法来源于指数表示形式,如 193 193 193可以表示为 1.93 × 1 0 2 1.93\times10^2 1.93×102
- 一般地,数的指数形式可记作:
N = M × 2 C N=M \times 2^C N=M×2C其中, M M M称为“尾数”, C C C称为“阶码”。
在存储时,一个浮点数所占用的存储空间被划分为两部分,分别存放尾数和阶码。尾数部分通常使用定点小数方式,阶码则采用定点整数方式(阶码的移码偏移量为127)。尾数的长度影响该数的精度,而阶码则决定该数的表示范围
IEEE754标准浮点数表示
阶码和尾数的位数都是由数值分析专家确定的
- 32位单精度格式
-
64位双精度格式
-
例 :写出下列十进制数据的IEEE754编码
① 0.15625 0.15625 0.15625 ② − 5 -5 −5
解:
① 0.15625 0.15625 0.15625转换成二进制值为 0.00101 0.00101 0.00101,在IEEE754中规格化表示为 1.01 × 2 − 3 1.01×2^{-3} 1.01×2−3, 阶码 3 3 3用移码表示: e = 127 - 3 = 124 = 7 C H = 0111 1100 ( 8 位 ) e=127-3=124=7CH=0111\ 1100 (8位) e=127-3=124=7CH=0111 1100(8位),尾码 01 01 01 表示为 01000000000000000000000 ( 23 位 ) 01000000000000000000000 (23位) 01000000000000000000000(23位)(尾数部分默认为1.M,因此不存储1),IEEE754编码为: 0 01111100 01000000000000000000000 = 3 E 20 , 0000 H 0\ 01111100\ 01000000000000000000000 = 3E20,0000H 0 01111100 01000000000000000000000=3E20,0000H
② − 5 -5 −5转换成二进制值为: − 101 -101 −101,在IEEE754中规格化表示为 1.01 × 2 2 1.01×2^2 1.01×22, e = 127 + 2 = 129 e=127+2=129 e=127+2=129,,IEEE754编码为: 1 10000001 01000000000000000000000 1\ 10000001\ 01000000000000000000000 1 10000001 01000000000000000000000 -
例 :将IEEE754单精度数(8位十六进制表示)转换为十进制数
① C 0 A 00000 H C0A00000H C0A00000H ② 3 F 880000 H 3F880000H 3F880000H
解:
① C 0 A 00000 H C0A00000H C0A00000H
1 10000001 01000000000000000000000 1\ 10000001\ 01000000000000000000000 1 10000001 01000000000000000000000
( − 1 ) 1 × ( 1.25 ) × 2 129 − 127 = − 1 × 1.25 × 2 2 = − 1.25 × 4 = − 5.0 (-1)^1×(1.25)×2^{129-127}=-1×1.25×2^2 =-1.25×4=-5.0 (−1)1×(1.25)×2129−127=−1×1.25×22=−1.25×4=−5.0
② 3 F 880000 H 3F880000H 3F880000H
0 01111111 00010000000000000000000 0\ 01111111\ 00010000000000000000000 0 01111111 00010000000000000000000
( − 1 ) 0 × ( 1.0625 ) × 2 127 − 127 = 1 × 1.0625 × 2 0 = 1.0625 × 1 = 1.0625 (-1)^0×(1.0625)×2^{127-127}=1×1.0625×2^0 =1.0625×1=1.0625 (−1)0×(1.0625)×2127−127=1×1.0625×20=1.0625×1=1.0625
非数值数据
非数值数据的表示本质上是编码的过程
ASCII码
采用7位二进制代码对字符进行编码
- 数字0-9的编码是0110000-0111001,它们的高3位均是011,后4位正好与其对应的二进制代码(BCD码)相符
- 英文字母A-Z的ASCII码从1000001(41H)开始顺序递增,字母a-z的ASCII码从1100001(61H)开始顺序递增,这样的排列对信息检索十分有利
- 最高位通常总为0,有时也用作奇偶校验位
中文字符编码:国标码GB2312
图像的二进制表示
分为采样与量化处理两个步骤:
- 采样就是要用多少点来描述一张图像,比如,一幅640×480的图像,就表示这幅图像是由307200个点所组成
- 量化是指要使用多大范围的数值,来表示图像采样之后的每一个点。这个数值范围包括了图像上所能使用的颜色总数,例如,以4个bits存储一个点,就表示图像只能有16种颜色
声音的二进制表示
最常见的音频数字化方式是透过脉冲编码调制PCM
- 声音经过麦克风,转换成一连串电压变化的信号,如图一所示。这张图的横座标为秒,纵座标为电压大小
- 将这样的模拟信号转为 PCM 格式的方法,是先以等时距分割。我们假设用每 0.01 秒分割,则得到图二
- 把分割线与信号图形交叉处的座标位置记录下来,可以得到如下资料,(0.01,11.65) 、(0.02,14.00) 、 (0.03,16.00) 、 (0.04,17.74) … …(0.18,15.94) 、 (0.19,17.7) 、 (0.20,20)
- 由于已知道时间间隔是0.01 秒,我们只要把纵座标记录下来就可以,得到的结果就是 11.65 14.00 16.00 17.74 19.00 19.89 20.34 20.07 19.44 18.59 17.47 16.31 15.23 14.43 13.89 13.71 14.49 15.94 17.70 20.00 这一数列
- 这一串数字就是将以上信号数字化的结果
视频的二进制表示
视频信息的两个衡量指标:采样频率(采样),采样深度(量化)。
- 采样频率是指每秒所捕获的画面帧数
- 采样深度是指经采样后每帧所包含的颜色位(色彩值)。如:采样深度为8位,则每帧可达到256级单色灰度。