【学习笔记】汇编:关于CMP的使用实例

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是否是正数


猜你喜欢

转载自blog.csdn.net/h2809871142/article/details/79380092