(精品课件)数的表示2.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(精品课件)数的表示2

移位运算有两种移位方式,逻辑移位和算数移位。下面以一个8位二进制数1000 1011为例来探讨。逻辑移位把1000 1011视为一串二进制串,不对该串做任何解读,不管是原码还是补码还是别的什么,只管移位,移丢了就移丢了,多出来的空位一律补0。1000 1011逻辑左移一位成为0001 0110,逻辑右移一位成为0100 0101。算数移位算数移位本质上是为了实现有符号数的快速乘除法。算数移位想要达到的效果是:使得算数左移一位得到的结果是原数乘以2(在最高位没有溢出的情况下),使得算数右移一位得到的结果是原数除以2(忽略移丢的最低位)。原码、反码、补码的编码规则各不相同,在不同的编码规则下要达到同样的最终效果,那就必须对1000 1011这一串数字作出解读,根据这串数字的编码规则而采用不同的移位策略。为了达到上述目的,显然应该规定“无论左移还是右移,符号位是不应该因移位改变的”。那么剩下的工作就是看看移位之后空出来的位置应该补0还是应该补1。先看最简单的原码表示法。若1000 1011B是一个原码,则它表示的是-11D,算数左移时,符号位为1不变,其余位000 1011依次左移,最高位的0移丢了(移丢的是0,所以没有溢出,若此处移丢的是1,则溢出,结果出错),最低位空出来一位,若最低位补0,则最终结果为1001 0110B,表示-22D,就是将-11乘以2的结果。(此处的道理可参考王道论坛《2012 计算机组成原理 联考复习指导》2.2节,再看看唐朔飞《计算机组成原理》第二版P235表6.5和6.6,相信一切就很清楚了。)同样的道理,以此类推,可总结如下:有符号数为正数时,原码、反码、补码的空位皆补0,因为它们对于正数的编码是相同的。有符号数为负数时原码左移、原码右移得到的空位均补0反码左移、反码右移得到的空位均补1补码左移得到的空位补1,补码右移得到的空位补0要注意区分正负数,比如整数补码的右移空位补0,而负数右移空位补1。.汇编语言中常用移位指令有SAL 算术左移指令(Shift Arithmetic Left)SAR 算术右移指令(Shift Arithmetic Right)SHL 逻辑左移指令(Shift Logic Left)SHR 逻辑右移指令(Shift Logic Right)这些指令都是针对补码的,因为计算机中的数实际上是用补码表示。例如有 AH=FFH(即-1),那么执行指令:SAR AH,1 后,AH仍为FFH。加减法运算原码的加减法这个很好做,先把符号位摘出来,符号位不参加运算,然后按照平常的算数规则,判断数的正负等等等等....补码的加减法由于补码的种种好处,计算机中普遍采用补码进行运算。补码加减法的两大基本公式[A+B]补 = [A]补 + [B]补[A-B]补 = [A]补 + [-B]补 (对于这个公式的理解参考《补码初探》)计算A+B时不用判断A和B的正负,直接将[A]补、[B]补 送入加法逻辑中,得到结果。过程如图图1.0?加法逻辑并不区分哪是符号位哪是数值位,只是把送入的两个数当成两个无差别的数字串,从低位到高位按位相加(当然会处理好进位),由于寄存器长度的限制,最终如果最左一位(也即符号位)有进位,该进位会被舍掉(相当于对结果做一次模运算)。可见补码加法的逻辑十分简单,这有利于计算机的硬件设计。相加结果当然也是用补码表示的。如果判断没有溢出,说明这个结果正确,于是此次加法运算结束,若有溢出,则会产生中断,进行溢出处理。计算A-B时先求出-B的补码,再把[A]补、[-B]补 送入加法逻辑中,得到结果可见补码的减法运算被转换成了加法运算已知B的补码求-B的补码的过程,称为“变补”。其运算规则为:将B的补码连同符号位各位取反、末位加一目前为止我们已经遇到了三种“各位取反、末位加一”的运算。由真值求补码:原码除符号位外,每位取反,末位加1由补码求真值:将符号位写为负号“-”,其余各位按位取反,末位加1由B的补码求-B的补码:将B的补码连同符号位各位取反、末位加一为了方便记忆,总结其特点:这三种运算都可以先摘出符号位不管,将其余位逐位取反、末位加1,然后再来看符号位需要做什么改变。由真值求补码,当然要保持补码和原码的符号位相同由补码求真值,真值的绝对值大小当然和符号位没什么关系由B的补码求-B的补码,其符号位当然要取反溢出判断说明:原码、反码、补码运算的溢出判断是不同的,但计算机一半采用补码实现运算,所以以下主要研究补码加法的溢出判断。真值溢出若一个数x超出了n位二进制数的定义域范围,即x?[-(2^n), (2^n)-1],则称真值x溢出。当运算过程中的某个结果x超出了机器所能表示的数的范围,则由于硬件的限制,x的某些位必须被舍掉,寄存器中留下的数据只是x的残渣,是不能正确反映计算结果的。所以计

您可能关注的文档

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档