汇编cmp比较指令的小问题

CMP有很多比较我很是不明白,希望那位大虾教教我比如说:CMPDL,39H为什么和39h比较那,39h又是什么,这样有什么用?参考程序如下(输入一个字符,以十六进制形式显... CMP有很多比较我很是不明白,希望那位大虾教教我
比如说:CMP DL,39H 为什么和39h比较那,39h又是什么,这样有什么用?参考程序如下(输入一个字符,以十六进制形式显示它的ASCII码)

.MODEL SMALL
.CODE
ASC PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AH,1
INT 21H
MOV DL,AL
MOV BL,AL
MOV CL,4
SHR DL,CL
ADD DL,30H
CMP DL,39H
JLE L1
ADD DL,07H
L1: MOV AH,2
INT 21H
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,39H
JLE L2
ADD DL,7
L2: MOV AH,2
INT 21H
RET
ASC ENDP
END ASC 另外,在程序的最后有几行
ADD DL,30H
CMP DL,39H
JLE L2
ADD DL,7
L2: MOV AH,2
INT 21H
RET
ASC ENDP
END ASC
如果大于就顺序执行,是怎么执行的,谁能具体解释一下,就是说,大于的话,执行什么,小于的话执行什么,为什么要加7,加了之后又执行什么?
展开
 我来答
匿名用户
推荐于2018-03-18
展开全部
我给你的程序加上了注释,你可以看哈!应该就会了,你说的后面一部分和前面的是一样的!30H是0的ASCII码的16进制形式,算法比较简单的,为了便于显示而加上了30H。39H就是9的ASCII码的16进制数!

.MODEL SMALL
.CODE
ASC PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AH,1
INT 21H ;调用1号中断输入ASCII码

MOV DL,AL
MOV BL,AL ;AL里面是输入的

MOV CL,4
SHR DL,CL;右移4位,去掉高4位,就是10进制数转化为16进制的算法4位4位
;转化
ADD DL,30H ;加上30H便于显示,在这里的判断也可以与9的比较而不加30H
CMP DL,39H ;39H是9的ASCII码的16进制形式
JLE L1 ;跳说明它小于等于9,可以直接显示了
ADD DL,07H ;加7就变成A B C D E F等值
;后面的就是处理低位了,算法是一样的
L1: MOV AH,2
INT 21H
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,39H
JLE L2
ADD DL,7
L2: MOV AH,2
INT 21H
RET
ASC ENDP
END ASC
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有以下基本参数:1. 工作频率:72MHz2. 外部时钟:最高可达120MHz3. 存储器容量:64K bytes4. 数据总线宽度:32位5. 输入/输出端口... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式