三种机器码的联系与理解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三种机器码的联系与理解
[摘要]为了对数据进行处理,首先要把数据表示出来,计算机中采用机器码表示数值型数据。首先从原码出发,分析了计算过程中出现的问题,引出补码,并深入剖析了补码的定义。在计算补码的过程中又引出反码。清晰地展示了三种机器码之间的内在关系,对机器码概念的理解有一定的帮助。
[关键词]原码补码反码模
[中图分类号]g623.58 [文献标识码] a [文章编号]2095-3437(2012)05-0127-02
一、引言
计算机可以看做是一个数据处理机,这里的数据含义很广,既包括数值型数据,也包括诸如汉字、图形、符号、声音等等非数值型的数据,既然要对这些数据进行处理,那么,首先,必须要把这些数据表示出来。这里介绍数值型数据在计算机当中的表示方法,也称为机器码。
二、三种机器码
说到数值型数据,我们自然会想到,有正数和负数之分,比如:+1001, -1100,既然计算机采用的是二进制,
也就是只有0和1两种状态,那么,正号和负号在计算机当中如何来表示呢?很显然,有两种解决的方法,第一:用0表示正数,我们把+1001可写为01001,用1来表示负数,把-1100可写为11100。
第二种方法:用1来表示正号而用0来表示负号。当把符号用0和1表示出来之后,也称为把符号数字化之后,还有一个问题,如果要进行加、减、乘除等等运算,那么符号位是否参与运算?如果参与运算,会有什么样的结果?为了能够妥善的解决这一系列的问题,就产生了把符号位和数值位一起编码的很多种表示方法,分别为:原码、补码、反码和移码。
同时,为了能够区别我们平常书写的带有正负号的数和符号数字化的数,我们把前者(即带有正负号的数)称为真值,用x表示;后者(符号数字化之后的数)称为机器码,用[x]原来表示(或[x]补,[x]反)。为方便描述,下面我们仅以整数为例。
(一)原码
整数原码的定义如下:
[x]原=0,x 2n>x≥02n+x 0≥x>-2n (1)
其中,x为真值,n为整数的位数。
原码是非常简单的一种编码方法,它由两部分构成,符号位和数值位。如果是正数,符号位用0来表示,如果是负数,符号位用1来表示;数值部分均为真值x的绝对值。
定义的理解:观察公式(1),正数原码的定义很好理解;负数原码的定义如何理解呢?不难发现,2n用二进制来表示,其形式为:在此基础上,加上n位数的绝对值即得原码,这与上面的描述(符号位用1来表示,数值部分是真值x的绝对值)相吻合。
原码虽然简单直观,但用原码做加法时,会出现如下问题:
从表1中可以看出,如果一个正数和一个负数做加法,事实上,我们会比较这2个数绝对值的大小,然后用绝对值大的数减去绝对值小的数,符号选择绝对值大的数的符号。也就是说,实际上,我们做的是减法运算。那么,能否只做加法运算呢,如果可以把减法运算都化为加法运算,只设计加法器就足够了。回答是肯定的,这要借助补码来实现。
(二)补码
介绍补码之前,必须先介绍模的概念。
什么是模呢?可以把模理解为一个容器的容量。比如:我们最常见到的时钟,它的容量是12,其模也就是12。利用模的概念可以帮助我们理解很多实际问题。
比如:时钟的时针目前指向6点的位置,要使其指向3点,共有2种方法,顺时针拨9格(+9),或逆时针拨3格(-3)。这里,+9和-3具有同样的实际意义。顺时针我们做的是加法运算:6+9=15,因为时钟的模是12,达到模的部分会自动丢失,也就是15-12=3,即3点。逆时针我们做的是减法运算:6-3=3。不难看出,在这个例子当中,-3和+9是完全等价的。负数-3用正数+9可以代替,这样就可以化减法运算为加法运算了。这里,+9就是-3的补码(模为12的情况下)。
通过刚才的实例,得出一个结论:如果运算是有模的运算,负数
用它的补码代替,就可以划减为加。那么如何求得其补码呢?通过观察发现:负数加上模即可得到补码。
在计算机中,如果能够效仿这种方法,同样可以化减为加。那么计算机当中的运算是有模的运算吗?是。因为在计算机中,数据是放在寄存器当中的,而寄存器的位数是固定的。例如:1个4位二进制计数器,当计数器从0变到15之后,再加1,计数器又变为0,也就是说这个计数器的容量是16,其模为2n=16。同理,n+1位的寄存器,模为2n+1。那么,n位的整数,计算其补码时,模是多少呢?为了在以后的运算过程中,符号位也能参与运算,我们连同符号位考虑在内,也就是说,n位的整数,放在n+1位的寄存器当中,模应该选择2n+1,如表2所示:
这样,得出补码的定义如下:
[x]补=0,x 2n>x≥02n+1+x 0>x>-2n(mod2n+1)(2)
其中,x为真值,n为整数的位数
注:正数的补码就是其原码,因为在运算过程中,它不需要被替换。
下面,举例说明负数补码的计算。
例:x=-1010
引入补码的目的是为了化减为加,可是,在计算补码的过程中,又出现了减法运算,我们改进一下计算补码的过程:
通过观察发现:这两个数符号位相同,数值位相反,这就是“原码”与“反码”的关系,由此可见,为了更加便捷地计算补码,引入了“反码”。那“反码”如何定义呢?很明显,反码加1得到补码,补码减1就是反码了。
(三)反码
为了更方便地计算负数的补码,引入了“反码”,其定义为:[x]反=0,x 2n>x≥0(2n+1-1)+x 0≥x>-2n
(mod2n+1-1)(3)
其中,x为真值,n为整数的位数
四、总结
详细介绍了3种机器码的表示方法:从原码的定义出发,分析了原码做加减法存在的问题,引出补码,并对补码的定义进行了深入的分析。为了简化补码的计算引出反码。清晰地展示了三种编码之间的关系。
[参考文献]
[1]唐朔飞.计算机组成原理(第2版)[m].北京:高等教育出版社,2008.
[2]白中英.计算机组成原理(第四版)[m].北京:科学出版社,2008.
[3]王诚. 计算机组成原理(第3版)[m].北京:清华大学出版社,2004.