当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《计算机原理》课程教学资源:机械工业出版社《编码的奥秘》参考书籍(PDF电子书)第20章 ASCII码和字符映射

资源类别:文库,文档格式:PDF,文档页数:11,文件大小:289.97KB,团购合买
数字计算机存储器按位存储,所以,需要在计算机上处理的信息必须按位的形式存储。 我们已经知道如何用位来表示数和机器码,下一个问题是如何用它来表示文本。毕境世界上 大量堆积的信息是文本形式的,就像装满图书馆的书、杂志和报纸。尽管我们最终要用计算 机来存放声音、图像和电影信息,但我们还是以较容易的文本存放开始。
点击下载完整版文档(PDF)

Chinapub.com 下载 第20章ASC|1和字符映射 数字计算机存储器按位存储,所以,需要在计算机上处理的信息必须按位的形式存储 我们已经知道如何用位来表示数和机器码,下一个问题是如何用它来表示文本。毕境世界上 大量堆积的信息是文本形式的,就像装满图书馆的书、杂志和报纸。尽管我们最终要用计算 机来存放声音、图像和电影信息,但我们还是以较容易的文本存放开始 为了以数字形式表示文本,必须开发一些系统使得系统里的每一个字母有唯一的编码。 文本中也存在数字和标点符号,所以也必须有它们的编码。简单地说,所有的字母、数字和 符号都要编码,这样的系统叫作字符编码集,每一个编码叫作字符编码 第一个问题是:这些编码需要多少位?这并不是容易回答的问题 当考虑用位表示文本的时候,需要切合实际。我们习惯于看到书中、报刊、杂志上精 的文本格式,段落按照相同的间隔整齐地分成一行一行,但这些并不是文本的本质。当我们 在杂志上看到一个小故事,几年后在一本书中又看到同样故事的时候,我们不会因为书中文 本间距的不同而认为是不同的故事 换句话说,不要以这种印刷成行列的二维格式来看待文本,应该把文本看成是一维的字 母、数字和标点符号流,此外,也许还有额外的编码用来表示一段的结束和另一段的开始。 再来看看,如果在杂志上看到一个故事,后来又在书中看到同样的故事但字样有些不同 这是一个大问题吗?如果杂志上的写法为 Call me Ishmael 而书中的写法为 Call me Ishmael 这些差别难道是我们真正关心的吗?恐怕不是。印刷样式是微妙地影响了文本的观感,但故 事本身并没有因为样式的改变而不同。样式可以经常修改,但不会带来什么影响 接下来另外一个简化问题的方法是:用平版的文本。没有斜体,没有粗体,没有下划线 没有颜色,没有空心体,没有上下标,没有音调标记,没有A、白、i、o等符号,只有 99%英语文本里纯粹的拉丁字母 在对摩尔斯电码和布莱叶盲文的早期研究中,可以看到如何将字母字符表示成二进制的形 式。尽管这些系统在特定的场合应用地很好,但用到计算机里都有一些问题。例如:摩尔斯电 是宽度可变的编码:对常用的字符采用短编码,对不常用的字符采用长编码。这样的编码系 统适用于电报,但对计算机来说却不合适。另外,摩尔斯电码对字母的大小写没有区分。 布莱叶盲文是宽度固定的编码,很适合计算机。每一个字符由6位表示,也可以区分大小 写,尽管它是用特殊的 escape码来区分的,该代码表明下一个字符为大写。这也就是说,每个 首部字符需要两个代码而不是一个。数字用 shifti码表示,在这个特定的代码后紧跟的代码被 看作表示数字,直到又一个shf码将其转换到字符状态 我们的目标是开发一个字符编码集,使得像如下的句子 I have 27 sisters e

下载 第20章 ASCII码和字符映射 数字计算机存储器按位存储,所以,需要在计算机上处理的信息必须按位的形式存储。 我们已经知道如何用位来表示数和机器码,下一个问题是如何用它来表示文本。毕境世界上 大量堆积的信息是文本形式的,就像装满图书馆的书、杂志和报纸。尽管我们最终要用计算 机来存放声音、图像和电影信息,但我们还是以较容易的文本存放开始。 为了以数字形式表示文本,必须开发一些系统使得系统里的每一个字母有唯一的编码。 文本中也存在数字和标点符号,所以也必须有它们的编码。简单地说,所有的字母、数字和 符号都要编码,这样的系统叫作字符编码集,每一个编码叫作字符编码。 第一个问题是:这些编码需要多少位?这并不是容易回答的问题。 当考虑用位表示文本的时候,需要切合实际。我们习惯于看到书中、报刊、杂志上精美 的文本格式,段落按照相同的间隔整齐地分成一行一行,但这些并不是文本的本质。当我们 在杂志上看到一个小故事,几年后在一本书中又看到同样故事的时候,我们不会因为书中文 本间距的不同而认为是不同的故事。 换句话说,不要以这种印刷成行列的二维格式来看待文本,应该把文本看成是一维的字 母、数字和标点符号流,此外,也许还有额外的编码用来表示一段的结束和另一段的开始。 再来看看,如果在杂志上看到一个故事,后来又在书中看到同样的故事但字样有些不同, 这是一个大问题吗?如果杂志上的写法为 Call me Ishmael 而书中的写法为 Call me Ishmael 这些差别难道是我们真正关心的吗?恐怕不是。印刷样式是微妙地影响了文本的观感,但故 事本身并没有因为样式的改变而不同。样式可以经常修改,但不会带来什么影响。 接下来另外一个简化问题的方法是:用平版的文本。没有斜体,没有粗体,没有下划线, 没有颜色,没有空心体,没有上下标,没有音调标记,没有 Å、 é 、 、 等符号,只有 9 9 %英语文本里纯粹的拉丁字母。 在对摩尔斯电码和布莱叶盲文的早期研究中,可以看到如何将字母字符表示成二进制的形 式。尽管这些系统在特定的场合应用地很好,但用到计算机里都有一些问题。例如:摩尔斯电 码是宽度可变的编码:对常用的字符采用短编码,对不常用的字符采用长编码。这样的编码系 统适用于电报,但对计算机来说却不合适。另外,摩尔斯电码对字母的大小写没有区分。 布莱叶盲文是宽度固定的编码,很适合计算机。每一个字符由 6位表示,也可以区分大小 写,尽管它是用特殊的e s c a p e码来区分的,该代码表明下一个字符为大写。这也就是说,每个 首部字符需要两个代码而不是一个。数字用 s h i f t码表示,在这个特定的代码后紧跟的代码被 看作表示数字,直到又一个 s h i f t码将其转换到字符状态。 我们的目标是开发一个字符编码集,使得像如下的句子 I have 27 sisters。 n ˜ ˙ o ˙

208编的奥 Chinaopub.com 下载 可以用一串代码来表示,每一个代码具有一定的位数。一些代码用来表示字母,一些表示标 点符号,一些表示数字。甚至有代码来表示字间的空格。上面的句子中有18个字符(包括字 间空格),这样一个句子的连续字符代码常称作文本串 在文本串里,用代码来表示数字(如27)似乎很奇怪,因为前面许多章里已讲过用位来表示 数字。我们可能会用简单的二进制数10和111该句中2和7的代码,但用在这里是不合适的 该句中,字符2和7可像英文作品中出现的任何一种字符一样来看待,它们可能具有与它们的实 际值毫不相干的字符代码 也许最经济的字符编码是5位编码,它首先用于1874年的电报机,是由法国电报服务公司 职员 Emile baudot发明的。他的编码1877年被服务公司.纳,后来由 Donald Murray修改并在 1931年被CCIT,即现在的国际电联(ITU)标准化。该编码的正式名称是国际电报字母表 NO2或∏A-2,在美国通常称为 Baudot,尽管更科学的叫法为 Murray编码。 在20世纪, Baudot经常用于电传打字机。 Baudot电传打字机有一个键盘,除了只有30个 键和一个间隔棒外,有些像打字机。电传打字机的键实际上是转换器,它产生二进制代码并 且通过电传打字机的输出电缆一位紧接一位地传送出去。电传打字机也有打印机制,从电传 打字机的输入电缆输入的代码触发电磁铁在纸上打印出字符 由于 Baudot是5位编码,所以总共只有32个代码,这些代码的十六进制值范围从Oh~IFh 下表是32个代码所对应的字母表中的字符 十六进制码 Baudet字符 十六进制码 Baudet字符 00 T 02 Carriage Return(回车)12 06 16 Line feed(换行) 09 L Figure Shift(数字转义) OC P Letter Shifte(字符转义) 代码00h没有指定。其余的31个代码中,26个指定给字母表中的字符,5个用斜体字或短 语表示出来了 代码04h是空格代码,用来分隔不同的字:代码02h和08h表示回车和换行。这些术语来自 于电传打字机。当在电传打字机上打字并且到了一行的末尾时,按下一个杠杆或按钮来完成 两件事情。第一,使打印头回到开始处,以便从纸的左边开始打印下一行,这是回车。第二 移动打印头紧接至刚完成的那一行的下一行,这是换行。在 Baudot中,独立的键产生这两个 代码。打印的时候, Baudot电传打字机响应这两个代码,完成相应动作 在 Baudot系统里,如何表示数字和标点符号呢?这就是代码1Bh的作用,在表中标识为数 转义。在数字转义代码之后,所有的代码序列被看作是数字或标点符号,直到遇到字符转

208 编码的奥秘 下载 可以用一串代码来表示,每一个代码具有一定的位数。一些代码用来表示字母,一些表示标 点符号,一些表示数字。甚至有代码来表示字间的空格。上面的句子中有 1 8个字符(包括字 间空格),这样一个句子的连续字符代码常称作文本串。 在文本串里,用代码来表示数字 (如2 7 )似乎很奇怪,因为前面许多章里已讲过用位来表示 数字。我们可能会用简单的二进制数1 0和111作为该句中2和7的代码,但用在这里是不合适的。 该句中,字符2和7可像英文作品中出现的任何一种字符一样来看待 ,它们可能具有与它们的实 际值毫不相干的字符代码。 也许最经济的字符编码是 5位编码,它首先用于1 8 7 4年的电报机,是由法国电报服务公司 职员Emile Baudot 发明的。他的编码1 8 7 7年被服务公司采纳,后来由 Donald Murray修改并在 1 9 3 1年被 C C I T T,即现在的国际电联 (ITU) 标准化。该编码的正式名称是国际电报字母表 N O . 2或I TA - 2,在美国通常称为B a u d o t,尽管更科学的叫法为M u r r a y编码。 在2 0世纪,B a u d o t经常用于电传打字机。 B a u d o t电传打字机有一个键盘,除了只有 3 0个 键和一个间隔棒外,有些像打字机。电传打字机的键实际上是转换器,它产生二进制代码并 且通过电传打字机的输出电缆一位紧接一位地传送出去。电传打字机也有打印机制,从电传 打字机的输入电缆输入的代码触发电磁铁在纸上打印出字符 。 由于B a u d o t是5位编码,所以总共只有3 2个代码,这些代码的十六进制值范围从0 0 h~1 F h。 下表是3 2个 代码所对应的字母表中的字符 : 十六进制码 B a u d e t字符 十六进制码 B a u d e t字符 0 0 1 0 E 0 1 T 11 Z 0 2 C a rriage Return(回车) 1 2 D 0 3 O 1 3 B 0 4 S p a c e(空格) 1 4 S 0 5 H 1 5 Y 0 6 N 1 6 F 0 7 M 1 7 X 0 8 Line Feed(换行) 1 8 A 0 9 L 1 9 W 0 A R 1 A J 0 B G 1 B F i g u re Shift(数字转义) 0 C I 1 C U 0 D P 1 D Q 0 E C 1 E K 0 F V 1 F Letter Shift(字符转义) 代码0 0 h没有指定。其余的 3 1个代码中,2 6个指定给字母表中的字符, 5个用斜体字或短 语表示出来了。 代码0 4 h是空格代码,用来分隔不同的字;代码 0 2 h和0 8 h表示回车和换行。这些术语来自 于电传打字机。当在电传打字机上打字并且到了一行的末尾时,按下一个杠杆或按钮来完成 两件事情。第一,使打印头回到开始处,以便从纸的左边开始打印下一行,这是回车。第二, 移动打印头紧接至刚完成的那一行的下一行,这是换行。在 B a u d o t中,独立的键产生这两个 代码。打印的时候,B a u d o t电传打字机响应这两个代码,完成相应动作。 在B a u d o t系统里,如何表示数字和标点符号呢?这就是代码 1 B h的作用,在表中标识为数 字转义。在数字转义代码之后,所有的代码序列被看作是数字或标点符号,直到遇到字符转

第0ACl和字映209 下载 义代码(1Fh)再返回到字符状态。下表是数字和标点符号的代码。 十六进制码 Baudot字符 十六进制码 Baudot字符 0123 Who Are You? 4660 Line Feed 456789A OB & IC 实际上,ITU没有定义代码05h、OBh和16h,而是保留为“国家使用”,这个表里列出的 是美国的用法。这些代码在某些欧洲国家语言中用作重音符号。响铃代码用来敲响电传打字 机上能听见的铃声:“ Who are you”代码激活一种机制,用它电传打字机能识别自己 像摩尔斯电码一样,这5位编码不能区别大、小写。语句 SPENT S25 TODAY 由下面的十六进制数据流来表示: 0c04140D100601041B1619011F0401031218151B070208 注意三个转义代码:1Bh在数字的前面,1h在数字的后面,最后一部分之前又有1Bh。该 行代码用回车、换行代码来结束。 然而,如果一行两次传送该数据流到电传打印机,将会出现以下情形: I SPENT $25 TODAY 8“03,5$25 TODAY 这是怎么回事?打印机接收到的上一行的最后一个转义代码是数字代码,所以第二行开 始的代码被解释成数字 类似这样的问题是采用转义代码所产生的典型的令人烦恼的结果。尽管 Baudot是很经济 的编码,但人们可能更想采用能唯一表示字符或标点符号且对大、小写进行区分的代码。 如果想确定比 Baudot更好的编码系统需要多少位,只需把各种符号加起来:大小写字母 需52个代码,0~9数字需10个代码,这已经有62个,加上一些标点符号,则超过了64个代码, 这意味着需要多于6位的编码。但是距离128个字符数,似乎还有足够的余地。如果超过128个 符,则需要8位编码 所以答案应该是7。如果不用转换代码来区分大、小写,那么英文里应该用7位来表示字符 这些字符编码都是什么呢?当然,我们可以随心所欲地编码。如果打算自己制造计算机 且计算机的每一个硬件都由自己制造,自己编程且不把自己所造的计算机去与任何其他计算 机连接,则可以构造自己的编码,所要做的就是给每一个字符一个唯一的编码 但是因为很少有独立制造和使用计算机这种情形发生,所以通常是大家遵循并使用同

第20章 ASCII码和字符映射 209 下载 义代码( 1 F h )再返回到字符状态。下表是数字和标点符号的代码。 十六进制码 B a u d o t字符 十六进制码 B a u d o t字符 0 0 1 0 3 0 1 5 11 + 0 2 C a rriage Return 1 2 Who Are Yo u ? 0 3 9 1 3 ? 0 4 S p a c e 1 4 ‘ 0 5 # 1 5 6 0 6 , 1 6 $ 0 7 。 1 7 / 0 8 Line Feed 1 8 - 0 9 ) 1 9 2 0 A 4 1 A Bel (响铃) 0 B & 1 B F i g u re Shift 0 C 8 1 C 7 0 D 0 1 D 1 0 E : 1 E ( 0 F = 1 F Letter Shift 实际上,I T U没有定义代码 0 5 h、0 B h和1 6 h,而是保留为“国家使用”,这个表里列出的 是美国的用法。这些代码在某些欧洲国家语言中用作重音符号。响铃代码用来敲响电传打字 机上能听见的铃声;“Who Are Yo u”代码激活一种机制,用它电传打字机能识别自己。 像摩尔斯电码一样,这5位编码不能区别大、小写。语句 I SPENT $25 TODAY. 由下面的十六进制数据流来表示: 0C 04 14 0D 10 06 01 04 1B 16 19 01 1F 04 01 03 12 18 15 1B 07 02 08 注意三个转义代码: 1 B h在数字的前面,1 F h在数字的后面,最后一部分之前又有 1Bh。该 行代码用回车、换行代码来结束。 然而,如果一行两次传送该数据流到电传打印机,将会出现以下情形: I SPENT $25 TODAY. 8‘03,5 $25 TODAY. 这是怎么回事?打印机接收到的上一行的最后一个转义代码是数字代码,所以第二行开 始的代码被解释成数字。 类似这样的问题是采用转义代码所产生的典型的令人烦恼的结果。尽管 B a u d o t是很经济 的编码,但人们可能更想采用能唯一表示字符或标点符号且对大、小写进行区分的代码。 如果想确定比 B a u d o t更好的编码系统需要多少位,只需把各种符号加起来:大小写字母 需5 2个代码,0~9数字需1 0个代码,这已经有6 2个,加上一些标点符号,则超过了 6 4个代码, 这意味着需要多于6位的编码。但是距离1 2 8个字符数,似乎还有足够的余地。如果超过 1 2 8个 字符,则需要8位编码。 所以答案应该是7。如果不用转换代码来区分大、小写,那么英文里应该用7位来表示字符。 这些字符编码都是什么呢?当然,我们可以随心所欲地编码。如果打算自己制造计算机 且计算机的每一个硬件都由自己制造,自己编程且不把自己所造的计算机去与任何其他计算 机连接,则可以构造自己的编码,所要做的就是给每一个字符一个唯一的编码。 但是因为很少有独立制造和使用计算机这种情形发生,所以通常是大家遵循并使用同一

210编的奥 Chinapub coM 下 编码。这样制造岀来的计算机就可以与其他计算机兼容,并且可以交换文本信息 我们可能也不应该随意编码,例如,当在计算机上处理文本时,如果字母表上的字符是按 顺序进行编码的,则会带来很多好处,其码这样的顺序使得按字母排序和分类更容易一些。 幸运的是,我们已经有了这样一个标准,即美国信息交换标准代码,简写为ASCI码。它 1967年正式公布,此后一直是计算机工业界最为重要的标准。除了一个大的例外(在后面讲 到),可以肯定的是,无论什么时候处理文本,总会以某种方式涉及到ASCI码 ASCI码是7位编码,用二进制代码00000001111,六进制代码00h~7Fh来表示。 让我们来看ASCI码,但不要从最开始看,因为前32个代码比其余代码理解起来要困难一些 从第二批的32个代码开始讲起,它包括标点符号和10个数字。下表列出了它们的十六进制代 码及对应的字符 十六进制码 Asc字符 十六进制码 AsC字符 space 32 #$% 6789 注意20h是空格符,用来分隔单词和句子。 接下来的32个代码包括大写字母和一些附加的标点符号。除@符号和下划线之外,这些 符号在打字机上不经常出现,它们出现在标准的计算机键盘上: 十六进制码AsC字符 十六进制码 Asc字符 423 @ ABcDE F 6789ABcpE Z KLMNo

210 编码的奥秘 下载 编码。这样制造出来的计算机就可以与其他计算机兼容,并且可以交换文本信息。 我们可能也不应该随意编码,例如,当在计算机上处理文本时,如果字母表上的字符是按 顺序进行编码的,则会带来很多好处,其码这样的顺序使得按字母排序和分类更容易一些。 幸运的是,我们已经有了这样一个标准,即美国信息交换标准代码,简写为 A S C I I码。它 1 9 6 7年正式公布,此后一直是计算机工业界最为重要的标准。除了一个大的例外(在后面讲 到),可以肯定的是,无论什么时候处理文本,总会以某种方式涉及到 A S C I I码。 A S C I I码是7位编码,用二进制代码 0 0 0 0 0 0 0~1111111 ,即十六进制代码 0 0 h~7 F h来表示。 让我们来看A S C I I码,但不要从最开始看,因为前 3 2个代码比其余代码理解起来要困难一些。 从第二批的3 2个代码开始讲起,它包括标点符号和 1 0个数字。下表列出了它们的十六进制代 码及对应的字符: 十六进制码 A S C I I字符 十六进制码 A S C I I字符 2 0 s p a c e 3 0 0 2 1 ! 3 1 1 2 2 “ 3 2 2 2 3 # 3 3 3 2 4 $ 3 4 4 2 5 % 3 5 5 2 6 & 3 6 6 2 7 ‘ 3 7 7 2 8 ( 3 8 8 2 9 ) 3 9 9 2 A * 3 A : 2 B + 3 B ; 2 C , 3 C 2 F / 3 F ? 注意2 0 h是空格符,用来分隔单词和句子。 接下来的3 2个代码包括大写字母和一些附加的标点符号。除 @符号和下划线之外,这些 符号在打字机上不经常出现,它们出现在标准的计算机键盘上: 十六进制码 A S C I I字符 十六进制码 A S C I I字符 4 0 @ 5 0 P 4 1 A 5 1 Q 4 2 B 5 2 R 4 3 C 5 3 S 4 4 D 5 4 T 4 5 E 5 5 U 4 6 F 5 6 V 4 7 G 5 7 W 4 8 H 5 8 X 4 9 I 5 9 Y 4 A J 5 A Z 4 B K 5 B [ 4 C L 5 C \ 4 D M 5 D ] 4 E N 5 E ^ 4 F O 5 F -

第0ACD和字符映2l 下载 接下来的32个字符包括所有小写字母和一些附加的标点符号,也是在打字机上不常出现的 十六进制码Asc字符 十六进制码 ASc字符 062666678 abcdefghijj 072345678yMB℃D y 注意该表中少了与7hh对应的最后一个字符。如果你一直在统计,这三个表总共列出了95 符。因为ASCI码是7位编码,可以有128个代码,所以还有33个代码可用。下面简单地讲 下这些代码 文本串 Hello, you! 可以表示成ASCI码的十六进制形式 48656c6c6E2C20796F752 注意除了字母代码以外,还有逗号(代码2C)、空格(代码20)和感叹号(代码21)。下 面是另一短句 用ASCI码表示为 注意句中数字12表示成十六进制数3h和32h,分别是数字1和2的ASCI码。当数字12作为文 本流的一部分时,它不应该被表示成十六进制码01h和02h,或者BCD码12h,或者十六进制 码0Ch。这些代码在ASCI里都表示的是其他意思。 ASCI码表示的大写字母与其对应的小写字母的ASCI码值相差20h,这使得编写某些程序代 码更为容易,如:把一个字符串变成大写。假设在内存的某个区域存放有字符串,一个字节放 个字符。下面的8080子程序假设字符串的首地址存放在寄存器H中:寄存器C存放有字符串 的长度,即字符串中的字符个数 Capita MOv A, C C= number of characters left(c为余下的字符数) CPI A, oOh Compare with0(与0比较) JzA11Done; If C is0,we’ re finished(如果c为0,则结束) MovA,[HL]; Get the next character(取下一个字符) CPI A, 6lh Check if it’s1 ess than"a(判断是否小于"a')

第20章 ASCII码和字符映射 211 下载 接下来的3 2个字符包括所有小写字母和一些附加的标点符号,也是在打字机上不常出现的: 十六进制码 A S C I I字符 十六进制码 A S C I I字符 6 0 ` 7 0 p 6 1 a 7 1 q 6 2 b 7 2 r 6 3 c 7 3 s 6 4 d 7 4 t 6 5 e 7 5 u 6 6 f 7 6 v 6 7 g 7 7 w 6 8 h 7 8 x 6 9 i 7 9 y 6 A j 7 A z 6 B k 7 B { 6 C l 7 C | 6 D m 7 D } 6 E n 7 E ~ 6 F o 注意该表中少了与7 F h对应的最后一个字符。如果你一直在统计,这三个表总共列出了 9 5 个字符。因为A S C I I码是7位编码,可以有1 2 8个代码,所以还有3 3个代码可用。下面简单地讲 一下这些代码。 文本串: Hello,you! 可以表示成A S C I I码的十六进制形式 48 65 6C 6C 6F 2C 20 79 6F 75 21 注意除了字母代码以外,还有逗号(代码 2 C)、空格(代码2 0)和感叹号(代码 2 1)。下 面是另一短句: I am 12 years old. 用A S C I I码表示为: 49 20 61 6D 20 31 32 20 79 65 61 72 73 20 6F 6C 64 2E 注意句中数字 1 2表示成十六进制数 3 1 h和3 2 h,分别是数字 1和2的A S C I I码。当数字1 2作为文 本流的一部分时,它不应该被表示成十六进制码 0 1 h和0 2 h,或者B C D码1 2 h,或者十六进制代 码0 C h。这些代码在A S C I I码里都表示的是其他意思。 ASCII码表示的大写字母与其对应的小写字母的ASCII码值相差20h,这使得编写某些程序代 码更为容易,如:把一个字符串变成大写。假设在内存的某个区域存放有字符串,一个字节放 一个字符。下面的8080子程序假设字符串的首地址存放在寄存器HL中;寄存器C存放有字符串 的长度,即字符串中的字符个数: Capitalize: MOV A,C ;C=number of characters left(C为余下的字符数) CPI A,00h ;Compare with 0(与0比较) JZ AllDone ;If C is 0, we’re finished(如果C为0,则结束) MOV A ,[HL] ;Get the next character(取下一个字符) CPI A,61h ;Check if it’s less than 'a'(判断是否小于'a')

212 编码的奥秘 Chinaopub.com 下 JC SkipIt Ifso, ignore it(如果是,则跳过) CPI A, 7Bh Check if its greater than'z'(判断是否大于z1) JNC Skipit ;Ifso, ignore it(如果是,则跳过 It’s1 lowercase, so subtract20h(是小写,则减20h) MOV [HLJ,A ; store the character(保存字符) SkipIt: INX HL Increment the text address(字符地址加1) ; Decrement the counter(计数器减1) JMP Capita1ize; Go back to the top(返回到程序开始处) AllDone: RET 从小写字母减去20h转换成大写字母的语句可以用下面的语句代替: ANI A, DEh AN指令是一个“与”立即数的操作,它把累加器中的数值与DFh(即二进制数l10111 执行按位“与”操作,即把两个数的对应位进行“与”操作“与”操作保留A中的所有位,除 了从左边数第3位被置成0。把这个位设置为0也即把ASCI码表示的小写字母转换成大写字母 上面列出的95个代码也称作图形字符,因为它们可以显示出来。ASCI码还包括33个控制 字符,它们不能显示出来但表示执行某一特定功能。鉴于完整性,这里列出了33个控制字符, 即使它们很难理解也不要担心。在ASCI1码公布以后,更多地是想把它们用在电传打字机上 现在许多代码已经很少见到了。 十六进制码 缩写词 控制字符名称 ol SOH 标题开始 文本开始 ETX 文本结束 04 EOT 传输结束 05 ENQ BEL 08 退格 水平制表 换行 垂直制表 OC 换页 回车 OF 移入 转义 DCI 设备控制1 DC2 设备控制2 设备控制3 C4 设备控制4 否定应答 同步 ETB 传输块结束

212 编码的奥秘 下载 JC SkipIt ;If so,ignore it(如果是,则跳过) CPI A,7Bh ;Check if its greater than 'z'(判断是否大于'z') JNC SkipIt ;If so ,ignore it(如果是,则跳过) SBI A,20h ;It’s lowercase,so subtract 20h(是小写,则减20h) MOV [HL],A ;Store the character(保存字符) SkipIt: INX HL ;Increment the text address(字符地址加1) DCR C ;Decrement the counter(计数器减1) JMP Capitalize ;Go back to the top(返回到程序开始处) AllDone: RET 从小写字母减去2 0 h转换成大写字母的语句可以用下面的语句代替: ANI A,DFh A N I指令是一个“与”立即数的操作,它把累加器中的数值与 D F h(即二进制数11 0 11111) 执行按位“与”操作,即把两个数的对应位进行“与”操作“与”操作保留 A中的所有位,除 了从左边数第3位被置成0。把这个位设置为0也即把A S C I I码表示的小写字母转换成大写字母。 上面列出的9 5个代码也称作图形字符,因为它们可以显示出来。 A S C I I码还包括3 3个控制 字符,它们不能显示出来但表示执行某一特定功能。鉴于完整性,这里列出了 3 3个控制字符, 即使它们很难理解也不要担心。在 A S C I I码公布以后,更多地是想把它们用在电传打字机上, 现在许多代码已经很少见到了。 十六进制码 缩写词 控制字符名称 0 0 N U L 空 0 1 S O H 标题开始 0 2 S T X 文本开始 0 3 E T X 文本结束 0 4 E O T 传输结束 0 5 E N Q 询问 0 6 A C K 应答 0 7 B E L 响铃 0 8 B S 退格 0 9 H T 水平制表 0 A L F 换行 0 B V T 垂直制表 0 C F F 换页 0 D C R 回车 0 E S O 移出 0 F S I 移入 1 0 D L E 转义 11 D C 1 设备控制1 1 2 D C 2 设备控制2 1 3 D C 3 设备控制3 1 4 D C 4 设备控制4 1 5 N A K 否定应答 1 6 S Y N 同步 1 7 E T B 传输块结束

Chinaopub.com 第0ACD和字映213 下载 十六进制码 控制字符名称 载体结束 替代字符 ESC 文件分隔或信息分隔4 组分隔或信息分隔3 记录分隔或信息分隔2 单元分隔或信息分隔1 DEL 控制字符可以与图形字符混合使用来设置一些基本的文本格式。这很容易理解,想像一 下诸如电传打字机或简单打印机之类的设备,它们对ASCI码流作出的响应是在纸上打印出字 符。设备的打印头通过打印一个字符并向右移动一格来对ASCI码作出响应。上面这些很重要 的控制字符就用来改变这种通常的动作 例如:看以下的十六进制字符串 09字符是一个水平制表符,简称Tab。假设打印页面上所有的水平字符位置是从0开始,Tab的 作用是在下一个水平位置即8的倍数处开始打印下一个字符,如下所示 这是保持字符按列对齐的简便方法。 换页符(12h)的作用是使打印机跳过当前页开始打印下一页 退格符用来在一些旧的打印机上打印复合字符,例如,假设计算机要控制电传打字机以 重音标记来打印小写字母e,即e,可以通过用十六进制码650860来实现。 最重要的控制字符是回车和换行,它们与 Baudot码中的回车换行符意义相同。在打印机 中,回车符使打印头移到打印页面的左边,换行符使打印头移到下一行,用两个代码通常表 示从新的一行开始。单独使用回车符可以用来在一个已有的行上打印,单独使用换行符可以 用来跳到当前位置的下一行而不移到左边 管ASCI1码是计算机世界的主要标准,但在许多IBM大型机系统上却没有采用。在 System/360系统中,IBM研制了自己的8位字符编码,即扩展的BCD交换代码 EBCDIC。该编 码是早期的 BCDIC6位编码的扩展,从IBM穿孔卡片使用的代码演变而来。穿孔卡片可以存 放80个文本字符,这种模式由IBM1928年首先引入并且用了50多年。 c匪 FOH L.LMOOISTUM2 1456剂9 LLLLLILLLLLLLLLLLLLLLLLLLLLLLLLLLILLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 2222252222222222222252222223222222252222225222222222222222252 33$金坐33333金3933333角3签33333 4444444A4444444444444444A444444A4A4444444444 55555555l55555555555§555555"5555555555555555§55555555555 6硒6666666666駟66666牺666幅666奶666牺6666“666 2777271722277270722722271222222722727227777177222727272227227222222772227772227? 9999129299999993

(续) 十六进制码 缩写词 控制字符名称 1 8 C A N 作废 1 9 E M 载体结束 1 A S U B 替代字符 1 B E S C 扩展 1 C F S 文件分隔或信息分隔4 1 D G S 组分隔或信息分隔3 1 E R S 记录分隔或信息分隔2 1 F U S 单元分隔或信息分隔1 7 F D E L 删除 控制字符可以与图形字符混合使用来设置一些基本的文本格式。这很容易理解,想像一 下诸如电传打字机或简单打印机之类的设备,它们对 A S C I I码流作出的响应是在纸上打印出字 符。设备的打印头通过打印一个字符并向右移动一格来对 A S C I I码作出响应。上面这些很重要 的控制字符就用来改变这种通常的动作。 例如:看以下的十六进制字符串 41 09 42 09 43 09 0 9字符是一个水平制表符,简称 Ta b。假设打印页面上所有的水平字符位置是从 0开始,Ta b的 作用是在下一个水平位置即 8的倍数处开始打印下一个字符,如下所示: A B C 这是保持字符按列对齐的简便方法。 换页符(1 2 h)的作用是使打印机跳过当前页开始打印下一页。 退格符用来在一些旧的打印机上打印复合字符,例如,假设计算机要控制电传打字机以 重音标记来打印小写字母e,即è,可以通过用十六进制码 65 08 60来实现。 最重要的控制字符是回车和换行,它们与 B a u d o t码中的回车换行符意义相同。在打印机 中,回车符使打印头移到打印页面的左边,换行符使打印头移到下一行,用两个代码通常表 示从新的一行开始。单独使用回车符可以用来在一个已有的行上打印,单独使用换行符可以 用来跳到当前位置的下一行而不移到左边。 尽管A S C I I码是计算机世界的主要标准,但在许多 I B M大型机系统上却没有采用。在 S y s t e m / 3 6 0系统中,I B M研制了自己的8位字符编码,即扩展的 B C D交换代码E B C D I C。该编 码是早期的BCDIC 6位编码的扩展,从 I B M穿孔卡片使用的代码演变而来。穿孔卡片可以存 放8 0个文本字符,这种模式由IBM 1928年首先引入并且用了5 0多年。 第20章 ASCII码和字符映射 213 下载

214 编码的奥秘 China° 下载 当考察穿孔卡片与相关的8位 EBCDIC字符编码的关系时,需要记住的是,在若干种不同 技术的支持下这种代码已经经历了好几代的演变。正因为如此,不要指望从中发现太多的逻 辑性和一致性。 穿孔卡片中,字符编码由一列上穿出的一个或多个矩形孔的组合而形成,字符本身通常 在接近卡片的上边沿处打印出来。下面的10行由数字标识,分别是第0行、第1行直到第9行 在第0行之上没有数字的行为第11行,最上边的行为第12行,没有第10行。 以下是一些常用的IBM穿孔卡片术语:行0~9称作数字行或数字穿孔,行11和12称作区 域行或区域穿孔。有一些IBM穿孔卡片也会带来混淆,把行0和9看作是区域行而不是数字行。 个8位 EBCDIC字符编码由高半字节(4位)与低半字节组成。低半字节是与字符的数字 穿孔一致的BCD码,高半字节是与区域穿孔一致的编码。回忆一下第19章的BCD编码标准 它是用二进制编码十进制数,即用4位编码来代表十进制的0~9 对数字0~9,没有区域穿孔,没有区域穿孔对应的高半字节是1111,低半字节是数字穿 孔的BCD码。下面是0~9的 EBCDIC编码 十六进制码 EBCDIC字符 mF2B FFF 23456789 对大写字母,如果只有第12行有穿孔,则用1100来标识:如果只有第11行有穿孔,则用 1101来标识;如果只有第0行有穿孔,则用1110来标识。大写字母的 EBCDIC编码为: 十六进制码 EBCDIC字符十六进制码EBcD|C字符十六进制码 EBCDIC字符 D3 E3 Q 注意这些编码的编号次序。在一些场合,当用 EBCDIC文本编写程序的时候,这些次序有 时还真令人头痛。 小写字母与大写字母的数字穿孔相同但区域穿孔不同。小写a~i的第12行和第0行有穿孔, 相应的区域代码为10004j~r的第12行和第11行有穿孔,区域代码为1001;s~z的第11行和第 0行有穿孔,区域代码为1010。小写字母的 EBCDIC编码为

当考察穿孔卡片与相关的 8位E B C D I C字符编码的关系时,需要记住的是,在若干种不同 技术的支持下这种代码已经经历了好几代的演变。正因为如此,不要指望从中发现太多的逻 辑性和一致性。 穿孔卡片中,字符编码由一列上穿出的一个或多个矩形孔的组合而形成,字符本身通常 在接近卡片的上边沿处打印出来。下面的 1 0行由数字标识,分别是第 0行、第1行直到第9行。 在第0行之上没有数字的行为第11行,最上边的行为第1 2行,没有第1 0行。 以下是一些常用的 I B M穿孔卡片术语:行 0~9称作数字行或数字穿孔,行 11和1 2称作区 域行或区域穿孔。有一些I B M穿孔卡片也会带来混淆,把行 0和9看作是区域行而不是数字行。 一个8位E B C D I C字符编码由高半字节(4位)与低半字节组成。低半字节是与字符的数字 穿孔一致的 B C D码,高半字节是与区域穿孔一致的编码。回忆一下第 1 9章的B C D编码标准, 它是用二进制编码十进制数,即用 4位编码来代表十进制的0~9。 对数字0~9,没有区域穿孔,没有区域穿孔对应的高半字节是 1111,低半字节是数字穿 孔的B C D码。下面是0~9的E B C D I C编码: 十六进制码 E B C D I C字符 F 0 O F 1 1 F 2 2 F 3 3 F 4 4 F 5 5 F 6 6 F 7 7 F 8 8 F 9 9 对大写字母,如果只有第 1 2行有穿孔,则用 11 0 0来标识;如果只有第 11行有穿孔,则用 11 0 1来标识;如果只有第0行有穿孔,则用111 0来标识。大写字母的E B C D I C编码为: 十六进制码 E B C D I C字符 十六进制码 E B C D I C字符 十六进制码 E B C D I C字符 C 1 A D 1 J C 2 B D 2 K E 2 S C 3 C D 3 L E 3 T C 4 D D 4 M E 4 U C 5 E D 5 N E 5 V C 6 F D 6 O E 6 W C 7 G D 7 P E 7 X C 8 H D 8 Q E 8 Y C 9 I D 9 R E 9 Z 注意这些编码的编号次序。在一些场合,当用 E B C D I C文本编写程序的时候,这些次序有 时还真令人头痛。 小写字母与大写字母的数字穿孔相同但区域穿孔不同。小写 a~i的第1 2行和第0行有穿孔, 相应的区域代码为1 0 0 0;j~r的第1 2行和第11行有穿孔,区域代码为1 0 0 1;s~z的第11行和第 0行有穿孔,区域代码为1 0 1 0。小写字母的E B C D I C编码为: 214 编码的奥秘 下载

Chinaopub.com 第0ACD和字映好215 下载 十六进制码 EBCDIC字符十六进制码 EBCDIC字符十六进制码EBcD|C字符 A 823886888 cde fgh 99999%999 2345678 当然,标点符号和控制字符也有 EBCDIC编码,但对该编码系统的全面考察并不需要。 似乎IBM穿孔卡片上的每一列就足以提供12位的编码信息,每个孔代表1位,是这样吗? 果真如此的话,可以用穿孔卡片上每一列12个位置中的7个来表示ASCI码的字符代码。但是 实际上,这并不合适,太多的穿孔将会影响到卡片物理状态的平直 EBCDIC中的许多8位码没有定义,建议采用ASCI码的7位编码是合理的。当ASCI码研 制出来的时候,存储器非常昂贵,于是一些人感到ASCI码应该用6位码并且采用转义字符来 区分大小写用以节约存储器。这种观点没有被接受,相反,人们认为ASCI码应该是8位编码, 因为即使在当时人们也普遍认为计算机应该是按8位存储,而不是7位。当然,8位字节现在是 标准的。因此,尽管ASCI码在技术上是7位编码,但它普遍是接8位值来存储的。 字节与字符之间的等价关系的确很方便,我们只需简单地通过统计字符数就可以粗略估 计一个文本文件所需要的存储空间。当然,用K和M来表示计算机存储空间用得更为广泛 此 例如,传统的8.5×11英寸的双倍空隙打印页面有1英寸的页边空白和大约27行的正文。每 行约65英寸宽,每英寸有10个字符,这样一页共有1750个字节。单倍空隙打印页面大约是 的2倍,约3.5KB 《 NEW Yorker》杂志每页有3列,每列有60行,每行大约有40个字符,这样每页有7200个 字符(或字节)。《纽约时代》每页有6列。如果页面都是文字而没有标题和图片(这是不常有 的),则每列有155行,每行大约有35个字符,从而整个页面有32550个字符,即32KB 硬面书每页大约500个字,平均每个字有5个字母,确切的说,应该是6个字符,因为要把 字间空格统计在内,这样书的每页约3000个字符。假设平均每本书有33页(这可能是一个估 计较高的数字),则意味着平均每本书大约是1MB 当然,每本书的差别很大: E, Scott Fitzgerald的《 The Great Gatsby》大约300KB。 J.D. salinger的 catcher in the Rye》大约400KB Mark Twain的《 he Adventures of Huckleberry Finn》大约540KB John steinbeck的《 he Grapes of Wrath》大约1MB Herman Melvi11e的《 Moby Dick》大约1.3MB。 Henry Fielding的《 The History of Tom Jones》大约2.25MB Margaret Mitchel1的《 Gone with the wind》大约2.5MB Stephen King的( The stand》大约2.7MB Leo Tolstoy的《 War and peace》大约3.9MB Marcel Proust的《 Remembrance of Things Post》大约7.MB

第20章 ASCII码和字符映射 215 下载 十六进制码 E B C D I C字符 十六进制码 E B C D I C字符 十六进制码 E B C D I C字符 8 1 a 9 1 j 8 2 b 9 2 k A 2 s 8 3 c 9 3 l A 3 t 8 4 d 9 4 m A 4 u 8 5 e 9 5 n A 5 v 8 6 f 9 6 o A 6 w 8 7 g 9 7 p A 7 x 8 8 h 9 8 q A 8 y 8 9 i 9 9 r A 9 z 当然,标点符号和控制字符也有 E B C D I C编码,但对该编码系统的全面考察并不需要。 似乎I B M穿孔卡片上的每一列就足以提供 1 2位的编码信息,每个孔代表 1位,是这样吗? 果真如此的话,可以用穿孔卡片上每一列 1 2个位置中的7个来表示A S C I I码的字符代码。但是, 实际上,这并不合适,太多的穿孔将会影响到卡片物理状态的平直。 E B C D I C中的许多8位码没有定义,建议采用 A S C I I码的7位编码是合理的。当 A S C I I码研 制出来的时候,存储器非常昂贵,于是一些人感到 A S C I I码应该用6位码并且采用转义字符来 区分大小写用以节约存储器。这种观点没有被接受,相反,人们认为 A S C I I码应该是8位编码, 因为即使在当时人们也普遍认为计算机应该是按 8位存储,而不是7位。当然,8位字节现在是 标准的。因此,尽管A S C I I码在技术上是7位编码,但它普遍是接8位值来存储的。 字节与字符之间的等价关系的确很方便,我们只需简单地通过统计字符数就可以粗略估 计一个文本文件所需要的存储空间。当然,用 K和M来表示计算机存储空间用得更为广泛一 些。 例如,传统的8 . 5×11英寸的双倍空隙打印页面有 1英寸的页边空白和大约2 7行的正文。每 行约6 . 5英寸宽,每英寸有1 0个字符,这样一页共有 1 7 5 0个字节。单倍空隙打印页面大约是它 的2倍,约3 . 5 K B。 《NEW Yo r k e r》杂志每页有3列,每列有6 0行,每行大约有4 0个字符,这样每页有 7 2 0 0个 字符(或字节)。《纽约时代》每页有6列。如果页面都是文字而没有标题和图片(这是不常有 的),则每列有1 5 5行,每行大约有3 5个字符,从而整个页面有32 550个字符,即3 2 K B。 硬面书每页大约5 0 0个字,平均每个字有 5个字母,确切的说,应该是 6个字符,因为要把 字间空格统计在内,这样书的每页约 3 0 0 0个字符。假设平均每本书有 3 3 3页(这可能是一个估 计较高的数字),则意味着平均每本书大约是 1 M B。 当然,每本书的差别很大: F.Scott Fitzgerald的 《The Great Gatsby》大约300KB。 J.D.Salinger的 《Catcher in the Rye 》大约400KB。 Mark Twain的《The Adventures of Huckleberry Finn》大约540KB。 John Steinbeck 的《The Grapes of Wrath》大约 1MB。 Herman Melville的《Moby Dick》大约1.3MB。 Henry Fielding 的 《The History of Tom Jones》大约 2.25MB。 Margaret Mitchell的 《 Gone With the Wind 》大约 2.5MB。 Stephen King 的《 The Stand》大约2.7MB。 Leo Tolstoy 的《 War and Peace 》大约3.9MB。 Marcel Proust 的 《Remembrance of Things Post》 大约 7.7MB

216编的肉 Chinaopub.com 下载 美国国会图书馆大约有20000万本书,总共有20万亿字符,即20TB的文本数据。(图书馆 还有大量的照片和录音。) 尽管ASCⅡ码是计算机世界里最重要的标准,但它并不是完美的。ASCI码的最大问题在 于它太倾向于美国!的确,ASCI码即使对那些以英语为主要语言的国家也几乎是不合适的。 尽管ASCI码包含有美元符号,但英镑符号呢?还有许多西欧国家语言中用到的重音符号呢? 更不用说在欧洲一些国家里使用的非拉丁字母,包括希腊文、阿拉伯文、希伯来文和西里尔 文。此外,还有印度及东南亚国家用到的婆罗门教的手迹。而一个7位编码又如何来处理成千 上万的中文、日文、韩文笔画以及韩语音节? 在研究ASCI码的时候,也一直在考虑其他国家的需要,尽管没有充分考虑非拉丁字母 根据公开的ASCI码标准,10个ASCI码代码(40h、5Bh、5Ch、5Dh、5Eh、60h、7Bh、7Ch、 7Dh和7h)可用来重新定义而为某一国家使用。另外,如果需要,数字符号(#)可用英镑 符号(£)替换,美元符号($)可用通用货币符号(¤)替换。显而易见,只有使用包含这 些替换符号的特定文本文档的所有人都知道这些变化的时候,替换符号才有意义 由于许多计算机系统按8位来存储字符,则可以设计扩展的ASCI码字符集来包含256个字 符而不仅仅是128个。在这样的字符集里,代码00h~7Fh定义成与ASCI码一致:代码80h FFh可定义成表示另外的字符。这种技术已被用来定义附加的字符代码,包含重音字母及非拉 丁字母。作为例子,这里有一个96个字符的ASCI码的扩展,称之为第1号拉丁字母表,定义 的字符编码从AOh~FFh。在该表里,十六进制字符编码的高半字节由最高行给出,低半字节 由左边列给出 U

美国国会图书馆大约有20 000万本书,总共有2 0万亿字符,即2 0 T B的文本数据。(图书馆 还有大量的照片和录音。) 尽管A S C I I码是计算机世界里最重要的标准,但它并不是完美的。 A S C I I码的最大问题在 于它太倾向于美国!的确, A S C I I码即使对那些以英语为主要语言的国家也几乎是不合适的。 尽管A S C I I码包含有美元符号,但英镑符号呢?还有许多西欧国家语言中用到的重音符号呢? 更不用说在欧洲一些国家里使用的非拉丁字母,包括希腊文、阿拉伯文、希伯来文和西里尔 文。此外,还有印度及东南亚国家用到的婆罗门教的手迹。而一个 7位编码又如何来处理成千 上万的中文、日文、韩文笔画以及韩语音节? 在研究A S C I I码的时候,也一直在考虑其他国家的需要 ,尽管没有充分考虑非拉丁字母。 根据公开的A S C I I码标准,1 0个A S C I I码代码(4 0 h、5 B h、5 C h、5 D h、5 E h、6 0 h、7 B h、7 C h、 7 D h和7 E h)可用来重新定义而为某一国家使用。另外,如果需要,数字符号( #)可用英镑 符号(£)替换,美元符号( $)可用通用货币符号(¤)替换。显而易见,只有使用包含这 些替换符号的特定文本文档的所有人都知道这些变化的时候,替换符号才有意义。 由于许多计算机系统按8位来存储字符,则可以设计扩展的 A S C I I码字符集来包含2 5 6个字 符而不仅仅是 1 2 8个。在这样的字符集里,代码 0 0 h~7 F h定义成与A S C I I码一致;代码8 0 h~ F F h可定义成表示另外的字符。这种技术已被用来定义附加的字符代码,包含重音字母及非拉 丁字母。作为例子,这里有一个 9 6个字符的A S C I I码的扩展,称之为第 1号拉丁字母表,定义 的字符编码从A 0 h~F F h。在该表里,十六进制字符编码的高半字节由最高行给出,低半字节 由左边列给出: 216 编码的奥秘 下载

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共11页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有