分享

1.2 数据的表示和类型

 R.W.B.yang 2010-04-26

1.2 数据的表示和类型

在用汇编语言进行程序设计时,程序员可以直接访问内存,对数据在存储器内的表示形式要有一个清晰的认识。下面,我们只简单介绍本课程所要用到的数据表示知识,为后面的学习作一点必要的准备。

有关“数据表示”的详细内容请参阅《计算机组成原理》中的相关章节。

1.2.1 数值数据的表示

(1)、二进制

在计算机内,数值是用二进制来表示的,每个二进制数按权相加就可得到其十进制数值。在书写二进制时,为了区别,在数据后面紧跟一个字母B

二进制的一般表现形式为:bn-1…b1b0B,其代表数值:bn-12n-1+…+b121+b020

数据的二进制表示形式简单、明了,但它书写起来比较长,所以,通常情况下,我们在程序中不直接用二进制来书写具体的数值,而改用八进制、十进制或十六进制。

(2)、八进制

八进制是一种二进制的变形,三位二进制可变为一位八进制,反之也然。八进制的表示元素是:0、1、…、7。在书写时,为了区别,在数据后面紧跟一个字母Q。如:1234Q、7654Q、54Q等都是八进制。

八进制数在程序中的使用频率不高。

(3)、十进制

十进制是我们最熟悉的一种数据表示形式,它的基本元素是:0、1、…、9。在书写时,为了区别,在数据后面紧跟一个字母D。在程序中经常用十进制来表示数据。

(4)、十六进制

十六进制是另一种二进制的变形,四位二进制可变为一位十六进制,反之也然。十六进制的基本元素是:0、1、…、9、A、B、…、F(字母小写也可以),其中:字母A、B、…、F依次代表10、11、…、15。

在书写时,为了区别,在数据后面紧跟一个字母H。当十六进制数的第一个字符是字母时,在第一个字符之前必须添加一个‘0’。如:100H、56EFH、0FFH、0ABCDH等都是十六进制数。

十六进制在程序中的使用频率很高。

(5)、数值进制的总结和相互转换

表1.1 各种进制及其字符表示

进制

字符

例子

备注

二进制

B/Y(*)

1010B、1011B

(*):字符Y、O和T是宏汇编MASM系统所增加的进制表示符。

八进制

Q/O

1234Q、311Q

十进制

D/T

1234D、512D

十六进制

H

1234H、1011H

下面是各进制数据之间进行转换的控件,浏览者通过它可很好地掌握这些进制之间的转换方法。当十进制转化为其它进制时,浏览者还可进行实际的练习操作
 
 

(6)、数的补码表示法

在计算机内,为了表示正负数,并便于进行各种算术运算,对有符号数采用二进制的补码表示形式。

补码的最高位用来表示正负数:0—正数,1—负数。

正数的补码是其自身的二进制形式,负数的补码是把其正数的二进制编码变“反”,再加1而得。

(7)、二进制数的符号扩展

在汇编语言中,我们经常要对字/字节的数据进行操作。当把“字节”转换成“字”,或“字”转换成“双字”时,就需要进行符号扩展。符号扩展的具体操作就是把已知信息的最高位扩展到所有更高位。

例1.1 把8位补码01011010、10101100分别扩展成16位补码。
解:根据符号扩展的含义,“字节→字”的具体扩展结果如下:

01011010 10101100

00000000

01011010

11111111

10101100

例1.2 把16位补码0101101111001010、1010111101011011别扩展成32位补码。
解:根据符号扩展的含义,“字→双字”的具体扩展结果如下:

0101101111001010 1010111101011011

0000000000000000

0101101111001010

1111111111111111

1010111101011011

(8)、n位二进制的表示范围

n位二进制所能表示的无符号整数的范围:0≤x≤2n-1。
  n位二进制所能表示的有符号整数(补码表示)的范围:-2n-1≤x≤2n-1-1。

在汇编语言中,常用到n为8和16时的数值范围:

n=8时,无符号整数的范围:0~255,有符号整数的范围:-128~127;
  n=16时,无符号整数的范围:0~65535,有符号整数的范围:-32768~32767。

(9)、BCD码

通常,我们习惯用十进制表示的数据,但计算机是用二进制来表示数数据的,这就需要进行数值进制之间的转换。我们把每位十进制数转换二进制的编码,简称为BCD码(Binary Coded Decimal)。

BCD码是用4位二进制编码来表示1位十进制数。这种编码方法有多种,但常用的编码是8421BCD编码,如表1.2所示。这种BCD编码实际上就是0~9的“等值”二进制数。

表1.2  8421BCD编码列表

十进制数字

8421BCD码

十进制数字

8421BCD码

0

0000

5

0101

1

0001

6

0110

2

0010

7

0111

3

0011

8

1000

4

0100

9

1001

BCD码进行进制的转换时,是要求在二种进制的表现形式上快速转换,而不是要求在“数值相等”的含义快速转换。

例1.3 求十进制数2000的BCD编码和其二进制数。

解:2000的BCD编码是把每位上的数2、0、0、0分别转换为其对应的BCD编码:0010、0000、0000和0000,把它们合在一起就是2000的BCD编码:0010 0000 0000 0000。

十进制数2000的二进制数是:11111010000,它们在数值上是相等的。

1.2.2 非数值数据的表示

计算机除了具有进行数值计算能力之外,还具有进行非数值计算的能力。现在,后者的应用领域已远远超过了前者的应用领域,如:文字处理、图形图象处理、信息检索、日常的办公管理等。所以,对非数值信息的编码就显得越加重要。

1、ASCII码

ASCII码(American Standard Code for Information Interchange)是目前应用极其广泛的一种信息编码,许多计算机系统都是采用它为字符进行编码。它是一种7位二进制编码。

右表是ASCII码的具体编码方案。在该表中,对学习本课程有用的主要信息有:

字符'0'~'9'是连续编码的,其编码的低4位就是该字符在十进制中的数值;

小写字母的编码比大写字母的编码大,对应字母的编码之间相差20H

当然,从ASCII码表中还可看出其它有用信息,还有扩展的ASCII码等知识,但这些内容对学习本课程的帮助不明显,故不再叙述。有兴趣的读者可参阅其它书籍。

表1.3 ASCII码的编码方案

  高位
 低位

000 001 010 011 100 101 110 111
0000 NUL DEL SP 0 @ P ` p
0001 SOH DC1 ! 1 A Q a q
0010 STX DC2 2 B R b r
0011 ETX DC3 # 3 C S c s
0100 EOT DC4 $ 4 D T d t
0101 ENQ NAK % 5 E U e u
0110 ACK SYN & 6 F V f v
0111 BEL ETB 7 G W g w
1000 BS CAN ( 8 H X h x
1001 HT EM ) 9 I Y i y
1010 LF SUB * : J Z j z
1011 VT ESC + ; K [ k {
1100 FF FS   < L \ l |
1101 CR GS - = M ] m }
1110 SO RS . > N ^ n ~
1111 SI US / ? O _ o Del

2、汉字编码

ASCII码是针对英文的字母、数字和其它特殊字符进行编码的,它不能用于对汉字的编码。要想用计算机来处理汉字,就必须先对汉字进行适当的编码。我国在1981年5月对6000多个常用的汉字制定了交换码的国家标准,即:GB2312-80。该标准规定了汉字交换用的基本汉字字符和一些图形字符,它们共计7445个,其中汉字有6763个。该标准给定每个字符的二进制编码,即国标码。

有关汉字编码的详细信息,请参阅其它有关书籍,在此不再介绍。
 

1.2.3 基本的数据类型

汇编语言所用到的基本数据类型为:字节、字、双字等,这些数据类型在以后的章节中都有相应的类型说明符。下面对它们进行最基本的描述。

1、字节

一个字节有8位二进制组成,其最高位是第7位,最低位是第0位,如右图所示。在表示有符号数时,最高位就是符号位。

通常情况下,存储器按字节编址,读写存储器的最小信息单位就是一个字节。

图1.2 字节数据类型示意图

2、字

2个字节组成一个字,其最高位是第15位,最低位是第0位。高8位称为高字节,低8位称为低字节,如右图所示。

字节和字是汇编语言程序中最常用的两种数据类型,也是最容易出错的数据类型。

图1.3 字数据类型示意图

3、双字

2个字(4个字节)来组成一个双字,其高16位称为高字,低16位称为低字,如右图所示。

双字有较大的数据表示范围,它通常是为了满足数据的表示范围而选用的数据类型,也可用于存储远指针。

字节、字和双字是汇编语言最常用的三种数据类型,下图表现出它们三者之间的组成关系。

图1.4 双字数据类型示意图

 

图1.5 字节、字和双字数据类型之间关系示意图

4、四字

4个字(8个字节)组成一个四字类型,它总共有64个二进制位,当然,也就有更大的数据表示范围,但在汇编语言中很少使用该数据类型。

5、十字节

10个字节组成一个十字节类型,它总共有80个二进制位。在汇编语言中很少使用该数据类型。

6、字符串

字符串是由若干个字节组成的,字节数不定,通常每个字节存储一个字符。该数据形式是汇编语言程序中经常使用的另一种数据形式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多