汇编语言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指令,程序运行正确。