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