
注意此时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 
                

















