【高手指教】一段汇编程序读不懂。

L: MOV A , R2
CLR C
SUBB A , #30H
MOV R2 , A
SUBB A , #0AH
JC SBIO
XCH A , R2
SUBB A , #07H
SBIO: MOV R2 , A
RET
最好每一句都有注释

本程序把R2中的16进制数字的ASCII码,变换成了16进制数。
0~9的ASCII码,进行变换的时候,要减去30H、
A~F的ASCII码,则需要减去37H,这样就变换成了对应的16进制数。
减去30H还是37H,要看原始数据是否小于10。详细理论可以参考有关资料。

L: MOV A, R2 ;取来16进制数字的ASCII码.
CLR C ;进位清零,因为下面的减法,进位要参加运算,故此先清零.
SUBB A, #30H ;先减去30H.
MOV R2, A ;保存.
SUBB A, #0AH ;再减去10
JC SBIO ;有借位,即不够减转移.
;无借位,则要再减7.
XCH A, R2 ;取回来。 XCH是交换指令,在这里相当于传送.
SUBB A, #07H ;减去7.
MOV R2, A ;送回去.
SBIO: RET ;结束.

原程序中,标号 SBIO 的位置有错误。
温馨提示:答案为网友推荐,仅供参考
相似回答