汇编语言cmp的问题

汇编语言cmp

今天,期末复习写了一个简单的比较大小程序,然后我发现在进行了一次cmp指令之后,出现了,cmp比较出错的问题。代码如下

DATA SEGMENT
    DATA0 DB 9,3,5,7
    MAX DB 0
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE ,DS:DATA
START:MOV AX,DATA
      MOV DS,AX 
      MOV AL,DATA0[0]
      MOV BL,AL 
      MOV AL,DATA0[1]
      CMP BL,AL  
      JA  A
      MOV BL,AL
      MOV AL,DATA0[2]
      CMP BL,AL   
      JA  B
      MOV BL,AL
      MOV AL,DATA0[3]
      CMP BL,AL
      JA  C
      MOV MAX,AL
      JMP OUT1
    A:
      MOV AL,DATA[2]  
      CLC
      CMP BL,AL
      JA  B
      MOV BL,AL
      MOV AL,DATA[3]
      CMP BL,AL
      JA  C
      MOV MAX,AL
      JMP OUT1
    B:MOV AL,DATA[3] 
      CLC
      CMP BL,AL
      JA  C
      MOV MAX,AL
      JMP OUT1  
    C:MOV MAX,BL
      JMP OUT1
   OUT1:  
      MOV DL,MAX
      ADD DL,30H
      MOV AH,02H
      INT 21H
   CODE ENDS  
   END START

在代码运行过程中,利用cmp进行比较,两个值,从而判断出最大值,但起初运行时,我发现在第一次比较之后,程序跳转到A,接着9与3 进行比较,cmp比较输出结果后,显示3大。
后来查阅书籍,cmp指令在比较的时候,虽然不会保存相减结果,而只是改变标志寄存器中的相应的标志位。
cmp指令对O,S,Z,A,P,C等标志位都会产生印象。从而对cmp指令判断产生影响。(但具体这里还不是太懂)
所以在程序运行的时候清除标志位,就不会在影响cmp指令,程序运行正确。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值