加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

我的电脑生涯(2):ASCII码

(2011-08-13 08:48:59)
标签:

ascii

汇编语言

分类: 电脑与智能手机

上一篇讲到了当时我编写程序的过程,可以看出,当时的编程是极其艰难的,写程序要用机器码,手边要放一本指令集,不时查看每条指令的用法和对应的二进制数字,很累。

 

如果能用英文字母的缩写来写程序而不用机器码,就会容易得多,例如:“LD A,008” 代表把地址为008的内存数据取到A寄存器里,就很直观。这种编程的写法被称为汇编语言,是计算机语言里最初级的一种。

 

用这样的汇编语言来写好程序后,为了让机器执行,我们对照指令表把它翻译成机器代码再穿成纸带使用,那么虽然写程序容易些了,但是还是不方便。有一个更方便的方法,就是写好程序后,在纸带穿孔机上输入时,直接就输入“LD A,008”这样的句子,把翻译的工作交给机器去做,这多好!

 

作为搞电脑工作的人,时刻要记住,自己身边就有一个机器作为助手,因此凡事都应该想到让它帮自己做。

 

这样做,需要解决两个问题:用汇编语言写好的程序如何在纸带上穿孔?再如何将它翻译为机器代码?

 

1)用汇编语言写好的程序如何在纸带上穿孔?

 

上篇文章说过,纸带穿孔机很像一架老式的英文打字机,它的键盘和英文打字机是一样的。所以,在键盘上敲击“LD A,008”这样的句子是不成问题的,但是在穿孔纸带上如何表示这个句子呢?这就需要一个穿孔代码的约定,怎样的孔算字母A,怎样的孔算逗号,等等。这个约定,就是ASCII码。

 

ASCII,就是American Standard Code for Information Interchange的缩写,即美国信息互换标准代码,下图是ASCII代码表。

 

我的电脑生涯(2):ASCII码

 

从表中我们可以看到,十六进制代码20H表示键盘上的空格键(即上表中十进制是32而字符栏是空白的那个),从这个空格开始直到7EH为止(即十进制是126的~),都是键盘上的字符键,如果用打字机打出来,都是可见的文字和符号。这些可见字符不算空格在内一共是94个。

 

使用过机械式英文打字机的人都知道,当一行字符快打完的时候,打字机会发出“叮”的一声铃响,提醒打字员别再不停地击键了,否则字符就打到纸外面去了。此时,打字员要用手把打字机的滑车推到最左边,这个动作称为“回车”。仅仅回车是不够的,如果此时打字员继续打字,字符就会重叠在刚才已经打过字的这一行上面,所以打字员还要用手把纸卷滚筒向前转一下,这个动作叫“换行”。打字的时候如果需要退回去,有个键叫“退格”键,按它可以一格格向后退。

 

对于上述这些动作,在ASCII码表里,都给了相应的代码,例如响铃码是07H,回车码是0DH,换行码是 0AH,退格码是08H,等等。上表中从01H到1FH这些代表动作的代码,被称为控制码。

 

如果有两架英文打字机分别放在两地,有人在甲机上操作,然后把这些操作用ASCII码记录下来,把这些ASCII码传递给乙机,乙机只要按这些代码行动,它所打出的字符就会和甲机完全一样。换句话说,只要记录下ASCII码的顺序,就等于记录下了要打印的文章内容及其格式,因此,如果用ASCII码传递电报内容,在电报的接收方可以很忠实的还原出原文来,由于发电报的时候还有其它一些控制信息,所以ASCII代码表中有一些用于电报通信的代码。

 

从上面的码表可以看出,控制码和可见字符码加起来,正好用7位二进制数可以囊括。所以用纸带穿孔的话,7个孔就够用了,另一个孔就用作奇偶校验,使得读取数据时更加可靠。

 

上一篇文章说过,无孔的纸带,其对应的码就是00H,如果这一排孔全都穿了洞,这排就是作废了,因此7FH就是作废的意思。一条8孔的纸带,每排刚好能表示一个ASCII字符,所以只要纸带穿孔机按这个码表的约定来穿孔,那么在键盘里输入“LD A, 008”这个句子后,自然就可以穿出有这串代码的纸带来了。举例说,当你键入L这个字母的时候,纸带上穿出的孔就是4CH,即1001100这7个(3个1代表有孔4个0代表没孔)。

 

由此可见,穿孔机不是简单地穿孔,它内含了一个变换的功能,即按ASCII码表把你按的键变成相应的代码孔。正是穿孔机具备了这样的能力,所以用它可以把用汇编语言写好的程序穿成纸带。

 

刚开始的时候,这个码表是美国国家标准,后来全世界都采用了这个标准,变成了国际标准,称为ISO 646。事实上,除了英文外,法文或者其它语言,有些字母和英文并不完全相同,所以ISO 646以ASCII为基础,但是又允许各国根据本国的文字情况做一些小的调整。
 

附录:如何看懂ASCII码表

 

这篇文章写完后,有朋友说看不懂,说穿了就是看不懂这个码表,下面我来做些解释。

 

假如有一串二进制数字是这样的:0100 1011 1100 1010,那么,念起来是否太长太拗口?还记不住?所以,人们就换一种方法来叙述它。先看下面这个表:

 

二进制数    十进制    十六进制数

  0000                       0

  0001                       1

  0010                       2

  0011                       3

  0100                       4

  0101                       5

  0110                       6

  0111                       7

  1000                       8

  1001                       9

  1010           10            A

  1011           11            B

  1100           12            C

  1101           13            D

  1110           14            E

  1111           15            F

 

这个表的最左栏是二进制数,第二栏是它们对应的十进制数,第三栏是对应的十六进制数。例如,十六进制数B,就是十进制的11。那么,前面的那长串二进制数,用十六进制来读,就是4BCA,是不是很容易了?十六进制数,在9以前,和十进制是一样的,从10开始到15,变成了ABCDEF,也不难记。(逢16进1 。因此,十六进制的21,就是2个16再加1等于33 。)

 

现在再回过头来看这个ASCII码表,里面的字母L,对应的十六进制数是4C,那么对照上面这个表看,它的二进制数就是 0100 1100,如果要穿孔成纸带,其中三个1就对应穿孔,但是,如果我们聊天的时候,就不说01001100这么长,就只需说,4C。又如,如果我们在键盘上按一个空格键,那么用ASCII码的十六进制说,就是20,如果用十进制说,就是32 。又是20,又是32,容易搞混淆了,所以如果要提到十六进制,就在数字后面加一个H,表示这不是十进制而是十六进制。那么,空格的ASCII码,就是20H 。

 

上面的那个句子“LD A,008”,我们敲击键盘的时候,就依次键入:L、D、空格、A、逗号、0、0、8,于是对应的ASCII码就是 4CH,44H,20H,41H, 2CH,30H,30H,38H 。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有