关于ASCII码的几点小结
1>ASCII码采用一个字节表示一个字符,其中前128个ASCII(0~127)为标准ASCII字条,第7位为0,高位为1的128个ASCII是扩展ASCII符.(我们平常使用的基本都在标准字符内.)
2>ASCII码分4组
第一组: 0~1FH,这是一组控件字体,回车CR的ASCII为0DH,用来控件光标回到当前行的最左端;换行LF的ASCII为0AH,用来移动光标到下一行,而所在列不变;响铃BEL的ASCII为07H;NULL的ASCII为0.(注意,这里的回车与我们平常编辑文件时的回车不一样,这里的回车相当于完成了Home键的功能,仅仅是将资材放到了行首,如果要换行,还要用0AH,能也就是0AH和0DH加起来才完成了我们平常概念上回车健所完成的功能.)
第二组:20H~3FH,20H为空格;30H~39H为数字的'0'~'9'.(注意这里的'0'~'9'是加了单引号的,这是一个字符,并非数值,数值0加上一个30H便可以得到一个字符'0',而数值0所表示的ASCII码字符为NULL,这是一个怎样的转换?如果说我在屏幕上输入一个"数"0,然后,我要它和另外一个数比如说10作一个运算,然后,将结果输出在屏幕上,首先,必须明确的是,屏幕上输出的都是字符,也就是说,我们在屏幕上看到的10,在我们看来是一个数值10,但在计算机看来是一个字符串10(这里应当读作壹零,也就是说这个10和我们在屏幕上看到的字符串ab是一个性质的),大概是因为C语言中printf和scanf函数已经在其库函数中,帮我们做好了其中的转换工作,以致于我们将程序的输出结果看成了一个数值.再回到上面,我们在屏幕上输入一个数0,这个时候,我们输入了一个字符'0',然后,系统会找到其对应的ASCII码30H存放到比如说是eax中,下面,我们就要用我们输入的字符'0'来完成与10相加的操作,显然,如果直接add eax,10d 那么,显然,我们等到的并不是我们想到的数值10,而是另外一个数,所以说,我们作运算的时候要先将eax中的值减去30H,得到我们真正想输入的数值0,然后,再用这个数值0和数值10与作运算(这里假定10是初始化的时候已经定义好了的),作完运算之后,我们要将结果在屏幕上输出,如果直接输出,显然也是不会有结果的,因为机器会输出10所对应的ASCII码,所以,当我们要输出的时候,就必须用这个10加个一个30H,方能在屏幕上输出一个我们想到的10,而其实这个10乃是一个字符串,这个理解上的转折应该是C语言造成的,C语言帮我们封装好了这一过程,以致于我们总以为屏幕上输出的都是数字,其实不然.)
第三组: 40H~5FH,对应了26个大写的英文字母和6个专用字符.其中41H~5AH表示'A'~'Z',40H表示@....
第四组: 60H~7FH,对应了26个小写的英文字母和5个专用字符,1个控件字符.其中61H~7AH表示'a'~ 'z'
观察:
A:0100,0000 B:0100,0001...Y:0101,1001 Z:0101,1010
a:0110,0000 b:0110,0001... y:0111,1001 z:0111,1010
也就是说,大小写字母的ASCII码就第5位是不同(小写字母第5位是1,大写字母是0),如果相减就正好留下第5位,即20H