报纸定位

首页 » 常识 » 预防 » 新书推荐第四章常用编码规则
TUhjnbcbe - 2024/7/3 16:28:00
北京哪个医院能治白癜风 https://baike.baidu.com/item/北京中科白癜风医院/9728824
4.1节数值编码规则

本节内容:不同进制数据的编码规则。

■数值数据的编码规则:二进制数、十六进制数和十进制数,以及无符号整数和有符合整数的编码规则。

■基本数据类型:编译器指定的数据类型为基本数据类型。汇编器MASM5.0指定的基本数据类型有BYTE、WORD、DWORD、DQ、DT以及由BYTE类型定义的字符串类型。

4.1.1数值数据的编码规则

■二进制数:0和1

■十六进制数:

■十进制数:BCD码

●压缩的BCD码:一个字节包含两个十进制数符号,如12H。

●非压缩的BCD码:一个字节只包含一个十进制数符号,如02H。

■无符号整数和有符号整数

无符号整数编码规则:无符号整数全部都是正整数,是什么就存什么,没有符号位。

有符号整数编码规则:最高位为符号位,“0”表示正数,“1”表示负数。

■有符号数的原码、反码、补码

●原码:最高位为符号位,(“0”代表正数,“1”代表负数)其余各位为数值本身的绝对值。

●反码:

正数:反码与原码相同,这是规定。

负数:符号位为1不变,其余位对原码取反。

●补码:

正数:补码与原码相同。

负数:符号位为1不变,其余位对原码取反加1。

■符号扩展

把一个n位二进制数扩展成m位二进制数(mn)。

无符号数:最高位前扩展(m-n)个0。

有符号数:最高位前扩展(m-n)个符号位。

举例

●无符号整数:扩展0。

8位无符号数扩展为16位无符号数:

●有符号整数:采用补码方式表示,进行符号位的扩展。

例1:21的8位二进制数扩展成16位二进制数

例2:-3的8位二进制数扩展成16位二进制数

■数值数据的表示范围

n位二进制数能够表示的范围。

无符号整数范围:0~2n-1。

有符号整数范围:-2n-1~+2n-1-1。

4.1.2基本数据类型

■字节byte简写db,一个字节由8位二进制数据位组成,第0位~第7位,字节类型的无符号整数表示范围0~,如果是有符号数,则数据范围是-~。一个字节足以表示一个ASCII码字符,或者一个扩展的ASCII码字符。

■字word简写dw,一个字由16位二进制数据位组成,一个字等于2个字节,第0位~第15位,由8位高字节+8位低字节组成。表示无符号数的数据范围是0~,有符号数的数据范围是-~。

■双字dword简写dd,2个字组成,双字等于4个字节,包含32位二进制位,由高16位+低16位组成,表示无符号数的数据范围0~-1,有符号数的数据范围是-~-1。

■四字qword简写dq,由2个双字组成,等于4个字或8个字节,包含64位二进制位,分高32位和低32位,表示无符号数的数据范围0~-1,有符号数的数据范围是-~-1。

■字符串,由字符构成的一个线性数组,通常每个字符用一个字节表示,有时也可以用一个字或者双字来表示。例如:ABCDEF。

4.2节字符编码规则

本节内容:字符编码规则。

■字符编码规则:ASCII码、ANSI字符集、Unicode字符集。

■变形国标码:国标码是16位编码,高8位表示汉字符的区号,低8位表示汉字符的位号。

4.2.1字符编码规则

计算机只能存储二进制数0和1,那么该如何表示字符呢?

■ASCII码字符

ASCII是美国国家标准信息交换码的英文缩写。每个字符由一个唯一的7位整数表示。只使用了每个字节的低7位,共个字符,对应标准美国键盘上的字母和符号。剩下的最高位被各种计算机用来创建私有字符集,比如IBMPC的扩展ASCII码。

■ANSI字符集

如图4-1所示。美国国家标准委员会(ANSI)定义了一个8位的字符集,用于表示个字符,前个对应标准美国键盘上的字母和符号。后个字符用于表示特殊字符,如其他语言字母表中的字母、重音符号、货币符号和分数等。MS-WindowsMe/95/98使用ANSI字符集。

提示

1.注意观察ASCII表,常用的ASCII字符对应的16进制数值需要熟记于心。如响铃字符的ASCII值07H,退格字符08H,TAB制表符09H,换行符0AH,回车符0DH,空格符20H,CTRL+B的ASCII值02H,CTRL+C的ASCII值03H。

2.大写字母“A~Z”的ASCII值为41H~5AH,小写字母“a~z”的ASCII值为61H~7AH,数字符“0~9”的ASCII值为30H~39H。

3.可见字符的ASCII值从20H开始,到7EH结束。

■Unicode标准

计算机软件中表示各种不同国家的语言有上百种编码方案,比较混乱。由此创建Unicode标准作为定义字符和符号的统一方法。Unicode标准定义了所有主要语言中使用的字母、符号及标点。Unicode有三种编码形式:

●UTF-8:ASCII码在UTF-8编码中占用一个字节,其字节值和ASCII码值相同。所有Unicode字符都可以用一种变长的编码系统表示。

●UTF-16:用于访问效率和存储空间并重的环境中。例如:WindowsNT//XP使用UTF-16编码,每个字符用16个二进制数据位编码。

●UTF-32:用于不太关心存储空间的环境。每个字符都使用32个二进制数据位编码,宽度固定。

图4-1字符ASCII表

4.2.2变形国标码

有了ASCII码,计算机可以处理数字、字母等字符,但是并不能处理汉字符。

我们国家年5月对六千多个常用汉字制定了交换码的国家标准,即GB2-80《信息交换用汉字编码字符集—基本集》。该标准规定了汉字信息交换的基本汉字符和一般图形字符,共计个,其中汉字分成两个等级共计个。该标准同时也给定了它们的二进制编码,即国标码。后来的字符集GBK收录个汉字,最新的字符集GB收录个汉字。

国标码是16位编码,高8位表示汉字符的区号,低8位表示汉字符的位号。实际上,为了给汉字符编码,该标准把代码表分成94个区,每个区94个位。区号和位号都从21H开始。一级汉字安排在30H区至57区,二级汉字安排在58H至77区。

机内码是汉字在计算机内部使用的编码。汉字的机内码采用变形国标码,其变换方法为:变形国标码=国标码+H,即将两个字节的最高位由0改1,其余7位不变。

区位码转换为国标码的方式:国标码是由区位码稍作转换得到。先将十进制区码和位码转换为十六进制的区码和位码,再将这个代码加上H,就得到国标码。

举例

某汉字区号为34,位号为56。区位码:。

34=B=22H

56=B=38H

国标码:H+H=H

变形国标码:H+H=C2D8H

4.3节键盘扫描码

本节内容:键盘扫描码。

■键盘扫描码:计算机的键盘上的按键分为字符键、功能键和控制键。每一个按键都对应一个键盘扫描码。当按下按键时的扫描码称为通码,松开按键时的扫描码称为断码。如果按下的是字符键,则将其对应的一个字节的扫描码和一个字节的ASCII码存入键盘缓冲区。我们将在第十六章输入与输出中断中详细讲解。

4.3.1键盘扫描码

键盘上的每一个键相当于一个开关,键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描。

按下按键时,开关接通,该芯片就产生一个扫描码,并说明按下的键在键盘上的位置。扫描码被送入主板上相关接口芯片中的寄存器,端口地址为60h。

松开按键时也产生一个扫描码,扫描码说明松开的键在键盘上的位置。松开键时产生的扫描码也被送入60h端口中。

按下时产生的扫描码称为通码,松开时的扫描码称为断码。断码=通码+80h。

从60端口读出扫描码,并转化为相应的ASCII码或状态信息,并存储在内存指定的空间(键盘缓冲区或状态字节)中。从键盘缓冲区读取扫描码进入显存就可以在屏幕显示。或者直接写入文件。

■scancode集

扫描码集分为set1、set2和set3。这里只介绍一般日常应用中的键盘码集set2。

基本scancode:绝大多数为1byte。

扩展scancode:由e0、e1或e2引导。

特殊的PrintScreen/SysRq键:e02ae。

物殊的Pause/Break键:e11d45e19dc5。

■小键盘scancode表

小键盘中的homeUpPgUpLeftRightEndDownPgDnInsDel由NumLock按下后再按得来。因此,会产生一个NumLockmark码后,再产生上述的mark通码。释放NumLock产生一个break断码。如表4-1所示。

■附加键scancode表

如表4-2所示。

■功能键scancode表

如表4-3所示。

■主键盘scancode表

如表4-4所示。若输入字符“ABCD”有两种方法:

●按下CapsLock键后,再输入abcd键,再按CapsLock键,产生一个CapsLock键mark和break码,然后依次是abcd的mark和break码,最后是CapsLock的mark和break码。

●按着L-shift或R-shift不放,再按abcd键,再放开L-shift或R-shift键

产生一个L-shift或R-shift键的mark码,然后依次是abcd的mark和break码,最后是一个L-shift或R-shift键的break码。

表4-1小键盘扫描码

表4-2附加键扫描码

表4-3功能键扫描码

表4-4主键盘扫描码

本文摘自编程达人系列教材《X86汇编语言基础教程》。

1
查看完整版本: 新书推荐第四章常用编码规则