DOS INT 21H中断 2号功能暗改AL

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值