王爽第十一章测试题答案

sub ax,ax
                  mov ax,5
                  add ax,-3
                  以上程序执行完后,CF,OF的值是_____
        1、         0,0
        2、         0,1
        3、         1,0
        4、         1,1
是不是选3?
分析:所有的数据在内存中都是以补码的形式存储,各种算术运算也是以补码的方式进行运算,所以5的补码是00000101b,-3的补码是11111101b,两者相加的结果是1 00000010,其中最左边的1是进位,5+(-3)=2,结果正确,所以有进位,无溢出。

还有,有哪些条件跳转指令不需要参考PSW状态字?

sub ax,ax
mov ax,5
add ax,-3
以上程序执行完后,CF、OF的值是   
A、0,0  B、0,1   C、1,0    D、1,1


分析:因为-3的补码为1101    而13的补码也为1101
此题可以明显看出是有符号运算,所以程序执行后。CF=0  OF=1

所以此题如果改成如下:

sub ax,ax
mov ax,5
add ax,1101B
则以上程序执行完后,CF、OF的值是  


请问该如何判断CF与OF的值。如何知道是有符号数运算还是无符号数运算。
求高人指点。


一个数是不是带符号数取决于程序员对参与运算的数最高位的使用:认为参与运算的数的最高位是符号位,则是带符号数;认为参与运算的数的最高位是有效数位,则是无符号数。
    其实计算机在进行加减运算时是不知道所处理的数是带符号数还是无符号数;计算机在进行加减运算时,是将运算结果作为带符号数和无符号数对符号位的影响都“罗列”出来,供编程者选用。我们也以楼主的题为例:
sub ax,ax           ;顺便说,这句是没有意义的,因为下面一句将 ax 赋值为 5 和 ax 是否为 0 无关;
mov ax,5 
add ax,-3 
以上程序执行完后,CF、OF的值是    
A、0,0  B、0,1   C、1,0    D、1,1 
   我们先分析 of。of = 1 表示“带符号数”溢出。什么是带符号数溢出?两个正数相加最为直观:数值部分向符号位进位既为溢出。上述是两个异号数相加,完全没有溢出的可能,因此 of = 0。
   再说 cf。cf 将记录运算结果的最高位向外的进位。这就是一个单纯的二进制运算,我们把 5 和 -3 展开,这里需要说明的是,ax 是16位寄存器,所以是两个16位二进制数相加;为了看着方便,我们4位一组分开写
 5=0000 0000 0000 0101
-3=1111 1111 1111 1101 (补码)
不难看出,两数相加向外进位是显然的。其实计算机的行为和我们刚才的过程一样,将两数作为带符号数和无符号数相加对符号位的影响都“罗列”出来,供后续代码选用。
   可能有朋友会说,代码中明明写的是 -3 ,这不是带符号数是什么?其实这只是给人看的,经编译后 -3 变成了1111 1111 1111 1101,这也可以看作是无符号数 65533。


坚持是正常的,放弃意味着真正的失败!支持楼上。
① 再次说明楼上所述代码的第一句:
        sub ax,ax
是没有意义的,因为下面一句将 ax 赋值为 5 和之前 ax 是否为 0 无关。
② 再说 add ax,-3 经编译后,源操作数把编译成 -3 的补码 65533,等到执行该语句时,计算机不知道这数字是无符号数 65533 还是 -3 的补码,仅直接按无符号二进制数的加法规则运算即可。计算结果是:
(AX)=2,CF=1
从无符号数的角度看,结果是65536(进位)+ 2 = 65538;
从带符号数的角度看,结果是 5 + (-3) = 2
③ zf 和 pf 的判断
    带符号数和无符号数相等或运算结果为零都是 zf = 1,ax 的内容为 2 ,那么容易得出 zf = 0;
    pf 用于标志运算结果的低 8 位 1 的个数,这显然和是不是带符号数没有关系,直接数运算结果低 8 位中 1 的个数即可。由于楼上所述代码的运算结果是存放在 ax 中的,所以仅需数一数 al 中 1 的个数是双数还是单数就行了。不难得到 al 中 1 的个数是奇数,所以 pf = 0.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值