CMP是进行(假的)减法计算后,不改变寄存器中的值,仅改变标志位的运算操作数
根据运算结果,可以与JZ JA JB JNA JNB等指令连用
JZ是ZF=1时跳转 即AX-BX=0
JA是ZF=1且CF=0时跳转 即AX-BX>0
JB是CF=1时跳转 即AX-BX<0
JNA是JZ与JB的联用 即AX-BX<=0时跳转
JNB是JZ与JA的联用 即AX-BX>=0时跳转
以下代码的作用是把DATAS里面的内容中的所有小写字符转为大写字符
DATAS SEGMENT
db "AbcDeFgHIjKLmN,OpQRsTuVwXyZ.",0
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DI,0
S: MOV Al,DS:[DI]
INC DI
CMP Al,0
JZ W
CMP Al,61H
JNB S1
JMP S
S1: CMP Al,7AH
JNA S2
JMP S
S2: SUB Al,20H
MOV DS:[DI-1],Al
JMP S
W: MOV AH,4CH
INT 21H
CODES ENDS
END START
同时还有小技巧
CMP AX,7FH
JNA S 可以获得AX是否是正数