当前课程知识点:微机原理与接口技术 > 第1周 微型计算机基础概论 > 第4讲 数制与编码 > 计算机中的编码
大家好
这一讲我们来介绍
计算机中的编码
由于计算机
它能够直接识别的
只有0和1
这样的二进制的形式
因此
我们在计算机中
所处理的所有的信息
都必须要转换成
0和1这样的形式
这就是所谓的编码
所以 编码
就是要将
所有由计算机处理的信息
来转换成二进制的形式
具体的来讲
编码
就是信息从一种格式
或者一种形式
转换成另外一种形式的
这样的一个过程
那么在我们
这个特定的这样一个环境下
所转换的这种形式
就是二进制的形式
那么
为什么需要这样的编码呢?
实际上
除了让计算机能够
识别这样一个因素之外
把这种各种样的信息
转换成一种代码的形式来表示
其实还有一个很主要的目的
就是为了
处理上的一种方便
计算机能够识别
或者处理的信息
除了数值以外
还有字符
声音 图形 图像 视频
等等这些
所有的这些信息
要能够让计算机所识别
都必须要转换成
0和1这样的形式
也就是说
都需要进行编码
那么
在我们这门课中
因为我们这门课涉及的是
计算机的硬件
也就是相对于来讲
它是一个比较底层的
一个处理的环节
所以我们在这里
不会去涉及到
视频 音频 图像
这样子的一些信息
我们只会去
考虑
数值和字符
计算机是人家美国人发明的
所以 最早
他们所处理的信息
都是数值信息
和西文字符
因此
下边我们要谈的计算机的编码
就是数值和西文字符的编码
数值的编码
除了我们已经都很清楚的
这种二进制数的形式
就是说二进制码以外
还有一种
就是用0和1来表示的
实际上是十进制数的性质
就叫BCD码
还有就是我们要介绍的是
西文字符的一种
就是美国国家信息编码的一个简称
加ASCII码
下边我们首先来介绍
BCD码
BCD码这是它的全称
就是Binary Coded Decimal
它就是用
二进制的形式
来表示的十进制数
所以
它的特点
是保留了十进制的权
但是用0和1来表示
我们知道
十进制实际上有
0到9这样十个符号
十个符号
我们要用二进制来表示
那么至少需要四位二进制码
因为
四位二进制码
才有十六种组合
三位二进制码
只有八种组合
不足以能够表示
全部的十进制的符号
所以
我们这里用四位二进制码
来可以表示一位十进制数
这种表示方法
我们也称为8421码
8421码
它的含义
为什么叫8421?
就是因为
我们来看这个例子
我们0000
用来表示十进制的0
那么1001
就可以来表示十进制的9
中间我们就
连续就不再去
一个个举出来
那么
在这样的一个表示方法中
这四位中
最高这一位
它的权值是多少呢?
是2的3次方
2的3次方就是8
次高位就是2的2次方
那就是4
所以依次下来
就是8421
所以这个是
这四位二进制码
它的权值
用这四位二进制码
来表示一位十进制数
因为我们十进制
只有十个符号
而四位二进制
又有十六种组合
因此
1010到1111
这样六个编码符号
就不是合法的BCD码了
而是十六进制数了
所以
这个是大家学习BCD的时候
稍微要注意的一点
那么BCD码
和十进制
我们刚才讲
BCD实际上
本质上就是
用0和1来表示十进制数
所以
它和十进制之间的转换
实际上是可以直接去对应的
我们来看这样一个例子
这个例子
我们BCD码
和二进制表示上
请大家注意
就是它都是每四位一组
每四位一组
这样子来隔开的
所以
在这样一个BCD数里
大家直接就可以
读取它的十进制数等于多少了
第一个四位
1001那是9
第二个四位
1000是8
依次类推
所以它等于986.3
这样一个数
所以
BCD跟十进制之间的转换
是非常简单的
因为它们实际上是
完全对应的一种关系
那么BCD
虽然它是用0和1来表示的
但是它不是二进制数
它本质上是十进制
因此
它要准换成二进制数
还有一个转换的过程
这个过程
就是先要把它转换成十进制
再转换成二进制
我们同样来看一个例
比如这样一个BCD数
那么它等于多少十进制数
大家可以一眼就出来
就是11.25
那么如果
它要转换成二进制数呢?
我们按照
我们前面讲过的
十进制到二进制的转换
整数部分除2取余
小数部分乘2取整
这样的方法
最后就得到了
这么样一个二进制数
这是BCD到十进制
和二进制之间的转换
那么
BCD码在内存中
是怎么存放的呢?
我们知道
内存一个单元里
都是有八位二进制码
都是存八位
也就是一字节数
那么BCD数
我们刚前面
我们刚说过
它是由四位二进制码来表示的
那么也就是说
一个字节的二进制
或者一个字节的
这样一个空间
能够存放两位
两组BCD
就是两个四位的BCD
或者说两位十进制数
这种表示方法
用我们称为压缩BCD码来表示
也就是说每四位二进制码
来表示一位十进制数
那么一个存储单元里
就可以存放两位BCD数
那么当然
我们计算机中
开始诞生那天起
就一直是八位字长
所以
我们也同样可以用
一个内存单元里
就放一位BCD数
这样子的情况
那么这种
我们称为
扩展BCD码来表示
也就是说
八位二进制码
来表示一位十进制
那么这个时候
当然有效的
还是只有第四位
这个时候高四位
它就全部是0
这是BCD
和二进制的转换
以及和十进制的转换
以及它们在内存中的
这样两种不同的存放形式
请大家注意
BCD实际上是给人看的
计算机的硬件
并不能识别
计算机的硬件永远只能认识
高电平和低电平
也就是0和1
所以
你存放在
内存单元中的这个数
这些01 01
这八个01 01
到底是BCD
还是二进制
这个实际上是
是要由程序员去控制和管理的
好 下边我们来说一下
西文字符的编码
西文字符
前面我们说
计算机是美国人发明的
而美国人所使用的文字
就是大写26个字母
小写26个字母
再加上
数值和标点符号 等等
因此 再另外
再加上一些
我们计算机中
特有的一些控制符号
所以
ASCII码
它总的合在一起
一共最早期的
就是128个字符
所以
它用我们所谓的标准ASCII码
就是用七位二进制码
就可以表示了
但是我们也说了
计算机从开始诞生那天起
就是一个字节
所以
七位二进制码
它是不能够符合
我们计算机字长的要求
因此这个时候
它把最高位也要用上
在标准ASCII编码中
最高位默认的是0
顺便也可以跟大家介绍
那么 今天
因为我们这个计算机
从美国后来就扩展到
就发展到欧洲
最后发展到全世界
那么
这个时候
这128个编码组合
显然不能够满足
我们全世界
各种文字的
编码的需求
所以
今天大家会听到
比如uniq的码
那个
等等一些其它的编码
那么这些
就是用十六位二进制码
来表示一个符号
比如我们汉字符
实际上就是
两个字节的二进制码来表示的
那么
从标准ASCII码
往欧洲去扩展的时候
因为欧洲的语言里
包括了像希腊的一些字母
包括了
像德语上面有两点
或者法语上面有一撇
这种表示
所以这种128个字符
是不够的
所以后来就变成了真正的
八位二进制码
来表示一个ASCII字符的
表示一个字符的这种形式
这种就叫扩展ASCII码
扩展ASCII码
就是八位二进制来表示的
好
那些在我们这门课里
暂时都不会涉及
我们在这里
大家看到的
都是用七位二进制码
来表示一个
表示一个字符的这种编码方式
也就是标准ASCII的编码
我们下面来看一个例子
在这个表里
我们看到
有一部分是大写字母
有一部分是小写字母
还有一部分是数值
它们都分别用
这样八位二进制码来表示
在这八位二进制码里
它们所有的高位
就最高这一位
就是第七位
都是0
这就是我们
标准ASCII编码的一个事例
大家看这样一个事例
从这个事例里
我们可以看出来
实际上编码是个什么呢?
编码说白了
它就是一种变换
也就是说我们现在的
大写字母A
因为我们直接写A
硬件不能够认识
所以我们写上01000001
这样的一个编码进去
计算机硬件
马上它就能认识了
认识以后
它自己内部
有这样一个转换表
所以它一看
它就会转换成
大写的字母A
因为我们在这门课里
上一次我们讲到了
十六进制数
十六进制数有十六个符号
0到9之外
还有A到F
分别来表示10到15
所以
请大家注意
我们现在红色字体
就是高四位为红色字体的
这个表里的一些编码
请大家一定要熟悉
这就是
A到F
和0到9的ASCII码
大家去观察一下
这些编码
会发现
它们的高四位都是一样的
从A到F
它们的高四位
都是0100
也就是都是4
从数值0到9
它们的高四位
都是0011
也就是都是3
特别是0到9的ASCII码
希望大家要熟悉
这样的话
我们后边在实际编程使用的时候
会带来一些方便
ASCII码
从刚才我们讲
它的标准ASCII码的有效位
只有七位
那么最高位
在默认情况下是0
但是在信息传输
或者在通信的时候
我们往往会需要知道
我所接收的
对方发给我的信息
是不是正确的
那么这个时候
就引入了一种校验的概念
最简单的一种校验
我们称为奇偶校验
奇偶校验就是
它利用
它传输的每个字节中
1的个数
是奇数个还是偶数个
这样的概念
来描述
到底我接收的东西是不是对的
也就是说
奇偶校验
实际上它是一种校验方式
从另外一个角度来讲
我们也相当于一个约定
就是说
比如我是发送方
你是接收方
那么我
我们事先约定好
我发送的信息里
每一个字节里
1的个数都是偶数个
那么等你接收到的时候
你可以去检验
每一个字节中
1的个数是不是偶数个
如果是偶数个
你就认为是对的
如果不是
你就认为是错的
但是
你怎么能够认定
我每一个发送的
我发送的每一个字节信息里
1的个数一定是偶数个呢?
比如我们现在
就要发送一个
字符1
也就是刚才我们
前面那张表里看到的
比如我们现在回去
就比如我们现在看到的
字符1
它的编码是00110001
这样子传送出来的一个字节
1的个数
就不是偶数个
但是我确实传送
就需要传送这个1
你也确实需要接收这个1
但是
我们事先认为它是
约定每一个字节里都是
1的个数都是偶数个的话
你这现在你就认为它是错的
因此在这种时候
我们就需要用到了最高位
用它来设计
设置
或者说调节
我们这种约定
这个话怎么讲呢?
我们下面用这个例子来说
最简单的这种校验方式
我们称为奇偶校验
我们用奇校验来给大家解释
这样子的一个
刚才我们说的这个原理
比如现在这个例子里
就是我们要发送的
这个是大写字母A
大写字母A的编码
本来是这样子的一个
里头这1的个数是偶数个
但是如果我们
约定用奇校验来传送的话
那么我们
必须要以这样的形式来传送
就是11000001
这样子的话
你接收到的时候
你知道最高位
它实际上是一个校验位
你可以把它去掉
然后 后边的才是
你真实接收到的数据
那么我们
约定了奇校验
那么你接收到以后
你一看1的个数是奇数个
你就知道它是对的
那么 相应的
如果这个搞清楚了
偶校验就不是问题
也就是说我们约定
每一个字节的数
我发送的每一个字节里
1的个数都是偶数个
那么 我们就以偶校验的形式
来传送
如果
偶校验来传送这个大写字母A的话
那就不需要变换了
我们最高位继续保持
它默认的0就可以了
这个就是
ASCII码中的
所谓的奇偶校验
这个奇偶校验在
是在通信中的一些概念
这里我们用它做例子
给大家介绍一下
这个 引入这个概念
好 有关编码
我们最后来做一个练习
这个练习里
我们有三道题目
首先 我们来看第一道题目
将这个二进制码
转换成对应的BCD数
那么它的转换过程
首先
跟我们前面一样
要转换成十进制数
转换十进制的方法
就是按照
权值表达式展开 求和
就可以了
那么这个二进制数的
它的整数部分
每一位都有它的权值
小数部分
每一位也有权值
这个方法
我们在前面已经学习过
所以我们在这里
直接给出一个结果
这个转换的结果
就是150.5625
那么这个数
就是十进制
那么它对应的
BCD数是多少呢?
我们就可以直接写出来了
比如150
那么1就是0001
5就是0101
等等
这样子
就可以直接写出
它的BCD的答案
请大家注意
表示BCD的时候
除了它的后边
一定要给出BCD
这样的标识之外
每四位二进制码
一定要写在一起
中间要有空格
这样子才能表示
它实际上
是一个十进制数的性质
第二道题是
把一个十六进制数
转换成多少十进制数
以及它的BCD数
这个十六进制数
转换成十进制的方法
也很简单 对吧
就是每一位
它的权值
比如在
也是权值表达式
展开求和就可以了
那么最高这一位1
就相当于1乘16的3次方
然后F
F是多少呢? 是15
它乘16的2次方
等等这样子
所以它
转换的结果
它等于的十进制数
等于7997
那么这个数
转换成BCD数
等于多少呢?
同样的
我们也可以直接把它写出来
7就是0111
9就是1001 等等
这就是它的结果
最后一道题是
我们以奇校验的形式
来传送大写字母B
那么
这个时候
它的ASCII码应该等于多少
B我们前面看到了
B的ASCII码
就是01000010
也就是说
用十六进制来说的话
是42H
在这样子的一个编码里
它的1的个数是偶数个
那么 如果
我们按奇校验传送的话
我们必须要让它的最高位
那个校验位
变成1
所以这个时候
它的编码
就变成了这种形式
有关编码这部分
因为相对比较简单
所以 我们
很快就学完了
希望大家能够理解
好 这一讲就到这
-第1讲 关于本课程
--关于本课程
-第2讲 微型计算机系统
--微机系统_01
--微机系统_02
-第3讲 微型计算机一般工作过程
-第4讲 数制与编码
--计算机中的编码
-第5讲 计算机中数的表示与运算
--数的表示
--符号数的表示
--数的表示与运算
-第6讲 基本逻辑运算与逻辑电路
-第7讲 本周小结
--本周小结
-第1周 微型计算机基础概论--第一周单元测验
-第8讲 8088微处理器
-第9讲 8088 CPU主要引线及机构
-第2周 8088微处理器--第二周单元测验
-第10讲 实模式存储器寻址
-第11讲 8088系统总线
--8088系统总线
-第12讲 微处理器小结
--微处理器小结
-单元测验--作业
-第13讲 指令概述
--指令概述
-第14讲 寻址方式
--寻址方式
-第15讲 通用数据传送指令
-第16讲 地址传送指令
--地址传送指令
-第17讲 输入输出指令
--输入输出指令
-第4周 数据传送指令--第四周单元测验
-第18讲 算术运算指令
--加法运算指令
--减法指令
--乘除运算指令
-第19讲 逻辑运算指令
-第20讲 移位操作指令
--移位操作指令
-第5周 算术运算、逻辑运算与移位操作指令--第五周单元测验
-第21讲 关于串操作指令的说明
--串操作指令说明
-第22讲 串传送与串比较
--串传送与串比较
-第23讲 串扫描指令
--串扫描指令
-第24讲 串装入与串存储指令
-第六周单元测验--作业
-第25讲 程序控制指令说明
-第26讲 转移类指令
--无条件转移指令
--条件转移指令
-第27讲 循环控制指令
--循环控制指令
-第28讲 过程调用指令
--过程调用指令
-第29讲 中断指令
--中断指令
-第30讲 处理器控制指令
--处理器控制指令
-第31讲 指令系统小结
--指令系统小结
-第7周 程序与处理器控制--第七周单元测验
-第7周 程序与处理器控制--第七周作业
-第32讲 汇编语言源程序
-- 汇编语言源程序_01
-- 汇编语言源程序_02
-第33讲 伪指令
--数据定义伪指令
--其它伪指令
-第34讲 系统功能调用
-第35讲 汇编语言程序设计示例详解
--程序设计示例1
-第36讲 汇编语言程序设计小结
-第8周 汇编语言程序设计--第八周单元测验
-第8周 汇编语言程序设计--第八周作业
-第37讲 半导体存储器概述
--半导体存储器概述
-第38讲 内存单元编址
--存储单元编址
-第39讲 随机存取存储器RAM
-- RAM_01
--RAM_02
-第40讲 只读存储器ROM
--ROM_01
--ROM_02
-第九周单元测验--作业
-第41讲 半导体存储器扩展
--存储器扩展_2
-第42讲 半导体存储器小结
--半导体存储器小结
-第十周单元测验--作业
-第十周作业--作业
-第43讲 基本I/O接口
-第44讲 简单接口芯片
--简单接口芯片
-第45讲 基本输入输出方法
--基本I/O方法
-第46讲 简单I/O控制系统设计
-第47讲 中断技术
--中断技术1
--中断技术2
-第48讲 输入输出与中断技术小结
--本周小结
-第十一周单元测验--作业
-第49讲 可编程定时计数器
-第50讲 可编程并行接口
-第51讲 可编程接口小结
--本周小结_01
--本周小结_02
-第十二周单元测验
-第52讲 模拟量的输入输出
--模拟量的输入输出
-第53讲 D/A转换器
-第54讲 A/D转换器
-- A/D转换器_01
-第十三周单元测验--作业
-第55讲 I/O接口系统综合设计示例详解I
-第56讲 综合设计示例详解II
-第57讲 结束语
--结束语