大福途网

【新书推荐】第四章 常用编码规则

admin
【新书推荐】第四章 常用编码规则-第1张-游戏相关-大福途网

前言:

目前大家对“dnf怪物代码2020”都比较关怀,小伙伴们都想要了解一些“dnf怪物代码2020”的相关知识。那么小编也在网络上网罗了一些有关“dnf怪物代码2020””的相关知识,希望看官们能喜欢,姐妹们快快来学习一下吧!
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位二进制数(m>n)。

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

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

举例

●无符号整数:扩展0。

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

0000 0001 8位

0000 0000 0000 0001 16位

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

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

0001 0101 8位

0000 0000 0001 0101 16位

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

1111 1101 8位

1111 1111 1111 1101 16位

■数值数据的表示范围

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

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

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

4.1.2 基本数据类型

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

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

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

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

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

4.2节 字符编码规则

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

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

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

4.2.1 字符编码规则

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

■ASCII码字符

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

■ANSI字符集

如图4-1所示。美国国家标准委员会(ANSI)定义了一个8位的字符集,用于表示256个字符,前128个对应标准美国键盘上的字母和符号。后128个字符用于表示特殊字符,如其他语言字母表中的字母、重音符号、货币符号和分数等。MS-Windows Me/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:用于访问效率和存储空间并重的环境中。例如:Windows NT/2000/XP使用UTF-16编码,每个字符用16个二进制数据位编码。

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

图4-1 128字符ASCII表

4.2.2 变形国标码

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

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

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

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

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

举例

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

34 = 0010 0010B = 22H

56 = 0011 1000B = 38H

国标码:2238H + 2020H = 4258H

变形国标码:4258H + 8080H = C2D8H

4.3节 键盘扫描码

本节内容:键盘扫描码。

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

4.3.1 键盘扫描码

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

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

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

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

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

■scan code 集

扫描码集分为set 1、set 2 和 set 3。这里只介绍一般日常应用中的键盘码集 set 2。

基本 scan code:绝大多数为 1 byte。

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

特殊的 PrintScreen/SysRq 键:e0 2a e0 37。

物殊的 Pause/Break 键:e1 1d 45 e1 9d c5。

■小键盘 scan code 表

小键盘中的 <home><Up><PgUp><Left><Right><End><Down><PgDn><Ins><Del> 由 NumLock 按下后再按得来。因此,会产生一个 <NumLock> mark 码后,再产生上述的mark通码。 释放 <NumLock> 产生一个 break断码。如表4-1所示。

■附加键 scan code 表

如表4-2所示。

■功能键 scan code 表

如表4-3所示。

■主键盘 scan code 表

如表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汇编语言基础教程》。

标签: #dnf怪物代码2020