8086汇编关于溢出、ADC/ADD、of溢出标志位的问题

ASSUME DS:seg1,CS:seg2

seg1 SEGMENT
    
    ;数据段代码定义
seg1 ENDS


seg2 SEGMENT
    start:
          MOV AX,seg1
          MOV DS,AX  ;将数据段加载到DS段寄存器里
          ;MOV AL,1H
          ;ADD AL,7fH;不带进位加法指令,改变标志位,但不加CF
          ;最高位未产生进位,CF=0
          ;奇数个1,PF=0
          ;低四位进位,AF=1
          ;结果不为0,ZF=0
          ;最高位为1,SF=1
          ;7FH=127D=0111 1111B
          ;+1=1000 0000B(-128)符号位溢出,OF=1
          ;是否溢出看目的操作数(AL/AX)是多少位的
          ;MOV AL,1H
          ;ADD AX,7FFFH
          ;7FFFH=32767D=0111 1111 1111 1111B
          ;+1=1000 0000 0000 0000B(-32768)符号位溢出,OF=1
          ;---------------------------------------------------
          ;带进位加法指令ADC
          MOV AL,1H
          ADC AL,7fH;上面的ADD指令已经将CF=1,所以AL的值应该是
                    ;7FH+1H+CF(1H)=81H,如果是有符号数就为-127
                    ;而最开始的ADD指令却是80H,
                    ;但是如果只有ADC指令而无其他修改标志位的指令
                    ;就会造成结果是80H,原因就在于8086汇编是先进行
                    ;源操作数+目的操作数+CF,再根据结果改变标志位
                    ;其实也可以这样想,没有结果,标志位该根据什么改变呢?



seg2 ENDS
 END start
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值