资源描述:
《溢出标志的判断.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、么是溢出(Overflow)?明确 溢出是针对有符号数来说的,无符号数没有溢出问题 注意 处理器内部以补码表示有符号数,8位表达的整数范围是:+127~-128,16位表达的范围是:+32767~-32768 定义 如果运算结果超出能够表达的数据范围,就产生了溢出 结论 有溢出,说明有符号数的运算结果不正确 标志 OF溢出标志(Overflow Flag)。若算术运算的结果有溢出,则OF=1;否则OF=0。 示例 3AH+7CH=B6H,就是58+124=182,这个8位运算的结果已经超出-128~+127范围,产生溢出,故OF=1。
2、另一方面,补码B6H表达真值是-74,显然运算结果也不正确。 区别 溢出标志OF和进位标志CF是两个意义不同的标志。进位标志表示的是无符号数运算结果是否超出范围,但运算结果仍然正确;而溢出标志表示的是有符号数运算结果是否超出范围,运算结果已经不正确。用8个二进制位表达无符号数整数的范围是:0~+255;16位表达的范围是:0~+65535。 对比3AH+7CH=B6H,无符号数运算:58+124=182,范围内,无进位;有符号数运算:58+124=182,范围外,有溢出。AAH+7CH=(1)26H,无符号数运算:170+124=29
3、4, 范围外,有进位;有符号数运算:-86+124=38,范围内,无溢出。 处理 处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF。应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。 判断 计算机中利用最高位和次高位都有进位判断有溢出。我们可以利用一个简单的规则:只有当两个相同符号数相加(含两个不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出(因为,此时的运
4、算结果显然不正确);其他情况下,则不会产生溢出。·例1:3AH+7CH=B6H,溢出·例2:AAH+7CH,无溢出·例3:3AH-7CH,无溢出·例4:AAH-7CH=2DH,溢出 例2.33:移位指令的功能 movcl,4 moval,0f0h;al=f0h shlal,1;al=e0h,CF=1,SF=1、ZF=0、PF=0,OF=0 shral,1;al=70h,CF=0,SF=0、ZF=0、PF=0、OF=1 saral,1;al=38
5、h,CF=0,SF=0、ZF=0、PF=0、OF=0 saral,cl;al=03h,CF=1,SF=0、ZF=0、PF=1 逻辑左移指令SHL执行一次移位,相当于无符号数的乘2;逻辑右移指令SHR执行一位移位,相当于无符号数除以2,商在目的操作数中,余数由CF标志反映。 例2.34:利用移位指令计算DX←3×AX+7×BX,假设为无符号数运算,无进位 movsi,ax shlsi,1;si←2×ax addsi,ax;si←3×ax m
6、ovdx,bx movcl,03h shldx,cl;dx←8×bx subdx,bx;dx←7×bx adddx,si;dx←7×bx+3×ax例2.35:将DX.AX中的32位数值左移一位 shlax,1 rcldx,1 例2.36:把AL最低位送BL最低位,但保持AL不变 rorbl,1 roral,1 rclbl,1 rolal,1 利
7、用移位或循环移位指令可以方便地实现BCD码转换。 例2.37:AH/AL分别存放着非压缩BCD码的两位,现将它们合并成为一个压缩BCD码存入AL movcl,4 rolah,cl;也可以用shlah,cl addal,ah;也可以用oral,ah