汇编数据运算方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对正数X0,如果1>X1/2,称为规格化数,其补码表 示形式为: 00 .1X2…Xn 对负数X<0,如果1/2>X-1,称为规格化数,其补码表 示形式为: 11.0X2…Xn 其中X2…Xn表示可任取“0”或“1”。因此,机器只要 判断运算结果的符号位与第一位数字是否相同,便可知道是 否是规格化的数。
这种判断方法不容易由硬件来实现。一般计算机定点补 码加减法溢出判断,采取查看有没有向符号位C n-1进位, 符号位的计算结果有没有向进位标志位C Y进位。溢出的判 断条件为 V=CYCn-1+CYCn-1
四、反码定点加减法运算
由于从原码求反码,在计算机 中的操作十分简单,有的计算 机加减法运算采用反码。 同补码运算一样,可不必事先 判断两个相加或相减的数的符 号再做运算。下面这两个公式 成立:
〔X〕反+ 〔Y〕反=〔X+Y〕反 〔X〕反+〔-Y〕反=〔X-Y〕反
1、反码定点加法运算 2、反码定点减法运算
1、反码定点加法运算
例5、 〔X〕反=11101100 〔Y〕反=11111011 〔X〕反=11101100 +)〔Y〕反=11111011 111100111 └──────→ +) 1 〔X+Y〕反=11101000 (-19) (-4)
第二节 浮点加减法运算
一、补码浮点加法
(一)对阶 (二)尾数运算 (三)规格化 (四)舍入问题
二、补码浮点减法运算
(一)对阶
这进一步操作是将两个加数的小数点对齐。方法是小 阶向大阶看齐,阶码较小的数,其尾数向右移,每右移 一位,阶码加“1”,直到两数阶码相同为止。例如: [A]补=00,101;00.110110 [B]补=00,100;11.010101 ↑↑ ↑ ↑ 阶 阶 数 尾 符 码 符 数 其中数A的阶码小于数B的阶,则将数A的尾数向右移两 次,同时阶加“2”得: [A]补=00,100;00.001101 这样阶码就相同了。
一、定点补码加法运算
设计算机字长为N,对以2N 为模的补码〔X〕补 和〔Y〕 补,有: 〔X+Y〕补=〔X〕补+〔Y〕补(mod 2N) 例1、 〔X〕补=11110111 (即十进制数-9) 〔Y〕补=11111110 (即十进制数-2) 〔X〕补= 11110111 -9 +) 〔Y〕补= 11111110 +)-2 〔X〕补+〔Y〕补=111110101 -11 ↑ 丢掉
当运算结果尾数出现00.0X2…Xn或11.1X2…Xn时,需要 将尾数左移以实现规格化,每左移一次,相应阶码减1,直 至实现规格化为止。我们称为左规格化,简称左规。 对上面的例子,需要左规一次,阶码减1,所以得到 [a+b]补=00,011;11,000100 当运算结果尾数出现01.X1…Xn或10.X1…Xn时,这在浮 点机不一定溢出,而首先将它右移一位,实现规格化,阶码 加“1”,然后由阶码来判断是否溢出,我们称为向右规格 化,简称右规。
此时,两个八位数相减,由于被减数小于减数,不够减, 所以必须向高位上借1才能进行运算,而得到的结果并不正 确。 为了正确反映无符号数的运算结果,在计算机运算器设 立进位标志位,当有进位或借位发生时,将进位标志位置1。
第二节 浮点加减法运算
在大型计算机和高档微型机中,浮点加减法运算是由硬 件完成的,而低档的微型机浮点加减法运算是由软件完成的, 但无论用硬件实现或由软件实现加减法运算,基本原理是一 致的。本节我们讨论实现补码浮点加减法运算的基本方法。 浮点加减法运算要经过对阶,尾数运算,舍入和规格化 三步操作。其中尾数运算与定点加减法运算相同,而对阶、 舍入和规格化,则是浮点加减法与定点加减法运算不同的操 作。 在补码浮点运算中,阶码与尾数可以都用补码表示。在 硬件实现的运算中,阶符和数符采取双符号位,正数数符用 00表示,负数数符用11表示。
例6、 18-20=-2 〔X〕反=00010010 〔Y〕反=00010100 〔-Y〕反=11101011
〔X〕反=00010010 +) 〔-Y〕反=11101011 〔X-Y〕反=11111101
五、无符号数加减法运算
对于无符号数,由于n位字长全部用来表示数值,它 的模相当于2n。例如: 00001011 +00001100 00010111 11+12=23 (23)
例2、 〔X〕补=00000101 (+5) 〔Y〕补=11111101 (-3) 〔X〕补= 00000101 +5 +) 〔Y〕补= 11111101 +)-3 〔X〕补+〔Y〕补=100000010 +2 ↑ 丢掉 进行补码加法运算时,如果最高位有进位,则自动丢掉。至 于这种进位丢失是否会影响结果的正确性,我们将在溢出判 断中讨论。
当两个无符号数相加和数≥2 n,最高位则产生进位 。例如: 11001011 +01001100 1 00010111 203+76=279
(23)
此时,两个八位数相加,由于和大于2 8,所以产生进 位。而得到的结果也不正确。 当两个无符号数相减时,如果被减数小于减数,则发生 借位。例如:
100000011 -00001000 11111011 3-8=-5 (251)
例4
〔X〕补=01001001 〔Y〕补=01001000 〔X〕补=01001001 +) 〔Y〕补=01001000 〔X+Y〕补 =10010001
(+73) (+72)
(-111)
参加运算的两个数为正数,结果应为正数。但和的数值 部分占据了符号位,计算机把结果变为负数。原因就在于运 算结果(145)大于计算机能表示的数的范围(127)。 根据参加运算的两个数的符号和运算结果的符号之间的 关系可以判断是否发生溢出。加法运算时,当字长为n位, 数值部分为(n-1)位,其数值部分的模为2n-1。这时运 算结果的绝对值≥2 n-1,就会发生溢出;<2 n-1 时就不 会发生溢出。 设参加运算的两个数为A和B,且A和B的绝对值都小 于2n-1显然若A、B异号,则A+B的绝对值一定小于2n -1,不会发生溢出。若A、B同号,则A+B的绝对值可 能出现≥2n-1的情况,就会发生溢出。 A、B同号,又分两种情况:A〉0,B〉0;A<0,B<O。 若令A、B的符号位分别为a n-1,b n-1;A+B= C,C的符号位为Cn-1,则
二、定点补码减法
我们可以将补码减法运算转换为补码加法运算。因为: 〔X-Y〕补=〔X+(-Y)〕补=〔X〕补+〔-Y〕补 由〔Y〕补求〔-Y〕补的方法,我们已经讨论过,这样 我们在计算机中只用加法器就可以完成加减法运算,而不必 单独设置减法器。
例 3、 9-2=7 〔X〕补= 00001001 〔Y〕补= 00000010 〔-Y〕补=11111110 〔X〕补= 00001001 +)〔-Y〕补= 11111110 〔X〕补+〔-Y〕补 =100000111 ↑ 丢掉
我 们 可 以 画 一 个 图 来 表 示 浮 点 数 和 溢 出 范 围 : 上 溢 A 负 浮 点 数 a 下 溢 b 正 浮 点 数 B
Biblioteka Baidu
00,1111111;11.0… … 0 0 00,1111111;00.1… … 1 11,0000000;11.01… … 1 11,0000000;00.10… … 0 图 3.2.1 浮 点 数 和 溢 出 范 围 图 中 此 时 机 器 溢 , 机 器 般 是 指 “ A, B, a, b 的 坐 标 都 是 补 码 表 示 。 凡 是 浮 点 数 在 a, b 之 间 时 , 即 为 下 溢 , 一 般 用 机 器 零 ( 即 全 零 ) 表 示 ; 凡 是 浮 点 数 在 A, B 二 点 之 外 时 , 即 为 上 碰 到 这 种 情 况 时 就 要 停 止 正 常 运 算 , 进 行 中 断 处 理 。 习 惯 上 说 “ 溢 出 ” 一 上 溢 ”。
三、定点补码加减法溢出判断
如果运算的结果,超出了计算机能表示的数的范围,会 得出错误的结果,这种情况称为溢出。 我们讨论一下补码定点加减法的溢出判断方法。 对于字长为n的计算机,那么它能表示的定点补码范围 为-2 n-1≤X≤2n-1 -1,或运算结果小于-2 n-1,则 发生溢出,发生溢出时数值的有效位占据了符号位。
(-23)
从这个例子我们看到,当最高位有进位时,不是将进位 丢掉,而是将进位加到结果的末位,称为循环进位,这是反 码运算与补码运算的不同点。因为,补码是以2 n 为模,运 算时,有进位2n,舍去不计。而反码是以2 n-1为模,运 算时,有进位2 n,若舍去,实际上多丢掉了“1”,所以 需要补上。
2、反码定点减法运算
(四)舍入问题
从加法运算中看到,当尾数右移时,末几位超出机器允 许的位数而丢失,因此就造成了误差,通常要进行舍入处理。 进行舍入时应满足两个要求,首先,对每一次运算的结 果而言,要保证不超过给定的范围。比如,设机器尾数长39 位,要求每次运算误差不超过末位(即第39位)的“1”, 即小于 2-39。其次在大量的运算过程中要保证误差的平衡, 即在每一次运算时,由于舍入处理,可能使运算结果增大了, 也可能减少了,但总的说来,增加和减少的机会必需是均等 的,否则会产生很大的积累误差。 常用的舍入办法有两种:
对于反码减法运算,有: 〔X-Y〕反=〔X〕反+〔-Y〕反 而〔-Y〕反可由〔Y〕反得到,设 〔Y〕反=Yn-1Yn-2……Y2Y1Y0 则〔-Y〕反=Yn-1Yn-2……Y2Y1Y0 也就是说,要得到〔X-Y〕的反码,只需作〔X〕 反 与〔-Y〕反的加法,而〔-Y〕反只要对〔Y〕反逐位求反 便可得到。这种通过对减数求反,使减法转化为加法的方法, 我们称他为“求反相加”。
当A〉0,B〉0时,an-1=0,bn-1=0,Cn-1 也应为0。若发生溢出,数值的最高位占据了符号位,使 Cn-1=1; 同理当A<0,B<0时,a n-1=1,b n-1=1, Cn-1也应为1。若发生溢出,数值的最高位占据了符号位, 使Cn-1=1。 综上补码加法运算的溢出条件为: V=an-1bn-1cn-1+an-1bn-1cn-1 若为补码减法,则有: 〔A〕 补 -〔B〕 补 =〔A〕 补 +〔-B〕 补 ,可将减 法运算变为加法运算,我们可按补码加法溢出判断方法来进 行。补码减法运算的溢出条件为: V=an-1bn-1cn-1+an-1bn-1cn-1
第三章 运算方法
第一节 定点加减法运算 第二节 浮点加减法运算 第三节 乘法运算 第四节 除法运算
第五节 十进制加减法
第一节 定点加减法运算
原码加减法比较复杂, 一、定点补码加法运算 需要事先判断数的符号, 二、定点补码减法 然后决定做加法还是做减 三、定点补码加减法溢出判断 法运算。补码的加减法运 四、反码定点加减法运算 算比较简单,采用补码加 减法运算,可将“正数加 五、无符号数加减法运算 负数”的操作,转化为 “正数加正数”的操作。 一般计算机采取补码进行 加减法运算。
(二)尾数运算
两数阶码对齐,即可进行尾数运算,所求的和的阶码为对 阶后的阶码。 尾数部分求和: 00.0011010 +)11.0101010 11.1000100 所以,结果为[A+B]补=00,100;11.1000100
(三)规格化
在浮点机器运算中,为了增加有效数字的位数,提高机 器运算的精确度,都必须将运算结果规格化。什么样的数是 规格化的数,在第二章中已讲过,不过在那里是对通常的数 而言的,对补码来讲,规格化的数意味着什么呢?显然,如 果是正数,跟原来一样,即第一位数字为“1”,如果是负 数,则情况就不一样了。为了使数的绝对值大于等于1/2, 条件是符号位后的第一个数字应为“0”(即 11.0×……×),或第一位数字为“1”,而以后各位全为 “0”(即11.10……0),前者小于-1/2,后者正好等于1/2。为了机器判断方便,在补码表示中,往往不把-1/2 列入规格化的数。这样,补码规格化数规定如下:
为了判断阶码是否溢出,阶码也要采用两个符号位,比 如,设阶码数值部分取七位,则它所能表示的最大阶码的补 码为[J] 补 =00,1111111,即127最小阶码的补码为[J]补 =11,0000000,即-128,一旦规格化后,阶码两个符号位不相 同,即出现01,X1…Xn或10.X1…Xn,则发生溢出,前者表 示阶码大于127,称为“上溢”,后者表示阶码小于-128, 称为“下溢”。