;子程序名:HTOASC
;功 能:把一位16进制数转换为对应的ASCII码
;入口参数:al的低4位为要转换的16进制数
;出口参数:al含对应的ASCII码
HTOASC PRO
AND AL,0FH
ADD AL,90H
DAA
ADC AL,40H
DAA
RET
HTOASC ENDP
程序不长,谁逐句给解释一下?谢谢了
目的是这样的,如果al的低四位为0-9,则结果为0-9,如果为0ah-0fh,则结果为A-F
DAA指令对大于9的位进行调整。
;子程序名:HTOASC
;功 能:把一位16进制数转换为对应的ASCII码
;入口参数:al的低4位为要转换的16进制数
;出口参数:al含对应的ASCII码
HTOASC PROC
AND AL,0FH ;保留al的低四位,现在al为0-0fh(压缩BCD码变成非压缩BCD码)
ADD AL,90H ;现在al=al+90h,al为90h-9fh
DAA ;如果al最初为0-9h,那么现在al为90h-99h(不大于9)
;如果al最初为0ah-0fh,那么现在al为0h-05h,同时CF被设置为1(因为大于9,所以被调整,同时影响了CF)
;DAA影响SF,ZF,AF,PF,CF等标志位。
ADC AL,40H ;如果al最初为0-9h,那么现在al为0D0h-0D9h
;如果al最初为0ah-0fh,那么现在al为40h-45h+CF,而CF在这种情况下为1,所以al为41h-46h=A-F
DAA ;如果al最初为0-9h,那么现在al为30h-39h(因为大于9,所以被调整)
;如果al最初为0ah-0fh,那么前面已经弄好了
RET
HTOASC ENDP