永发信息网

汇编cmp比较指令的小问题

答案:2  悬赏:10  手机版
解决时间 2021-07-17 01:04
  • 提问者网友:星軌
  • 2021-07-16 04:51

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,加了之后又执行什么?

最佳答案
  • 五星知识达人网友:爱难随人意
  • 2021-07-16 05:30
我给你的程序加上了注释,你可以看哈!应该就会了,你说的后面一部分和前面的是一样的!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
全部回答
  • 1楼网友:动情书生
  • 2021-07-16 06:32
39h是asc码的 9 程序的意思就是说 因为你要显示的16进制 如果除到的数大于9 那么显然就要显示ABCDEF之类的 而不能显示123456789了 所以说 大于9就去显示ABCDEF 小于就执行1234567890 +7 无非是要显示的内容 asc码值之间的计算 仔细想想 很简单的思路
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯