注意此时AX=0200,DX=0057
执行INT 21H之后:
可以看到执行完“??? [BX+SI]”之后,AL就变为了57H,和DL相同。
部分INT 21H功能表:
所以究竟是什么原因呢?
-----------------------------------------------分割线(以下内容与正文无关)----------------------------------------
汇编语言,显示字符的ASCII码,16进制表示:
dsg segmentcr db 0DH, 0AH, '$'i_p db 'char: ', '$'o_p db 'ASCII: ', '$'
dsg ends
ssg segment
db 256 dup(?)
ssg ends
csg segmentassume cs:csg, ds:dsg, ss:ssg
start:mov ax, dsgmov ds, ax
T: mov dx, offset cr ; 回车mov ah, 9int 21Hmov dx, offset i_p ; 输入提示mov ah, 9int 21Hmov ah, 1 ; 读取一个键盘字符int 21Hmov dx, offset crmov ah, 9 ; 回车int 21Hmov dx, offset o_p ; 输出提示int 21Hmov dl, almov cl, 4shr dl, cl ; 显示高四位call show_charmov dl, aland dl, 0FH ; 显示低四位call show_charmov dx, offset crmov ah, 9 ; 回车int 21Hjmp Tmov ah, 4CHint 21Hshow_char proc nearpush ax ; DOS中断2号功能会暗改alcmp dl, 0AHjnl a_fadd dl, 30Hjmp show
a_f: add dl, 37H
show:mov ah, 2int 21Hpop axret
show_char endp
csg endsend start