帮忙解释程序语句的意思解决方案

帮忙解释程序语句的意思
以下是程序作用是:16进制数化ASCII码的一般方法(显示内存内容)

MOV SI,0 
MOV BL,10 
LOP: MOV DL,[SI] 
MOV CL,4 
SHR DL,CL 
CMP DL,0A 
JC J1 
ADD DL,7 ;这里为什么DL加7
J1: ADD DL,30 ;这里为什么DL加30
MOV AH,2 ;这里为什么AH赋值2
INT 21 
MOV DL,[SI] 
AND DL,0F ;这里为什么DL和0F相与
CMP DL,0A 
JC J2 
ADD DL,7 
J2: ADD DL,30 
MOV AH,2 
INT 21 
MOV DL,20 
MOV AH,2 
INT 21 
INC SI 
DEC BL 
JNZ LOP 
INT 20 

帮忙解释每一条语句的意思,谢谢!

------解决方案--------------------
ADD DL,7 ;这里为什么DL加7
大于10的数的ASCII码值为十六进制数加37H,后面有加30H,所以此处先加7
------解决方案--------------------
J1: ADD DL,30 ;这里为什么DL加30
小于10的十六进制数的ASCII码就是数本身加30H
------解决方案--------------------
AND DL,0F ;这里为什么DL和0F相与 保留低4位,消除高4位