一个诡异的问题
时间:2011-09-23
来源:互联网
先贴上代码
;用二进制形式显示所按键的ASC2码
cseg segment
assume cs:cseg
start:
next:
xor ax,ax
mov ah,1
int 21h
call newline
mov bl,al
mov cx,8
tobin:
shl bl,1
mov dl,30h
adc dl,0
mov ah,2
int 21h
loop tobin
call newline
cmp al,"$"
jnz next
mov ah,2
int 21h
mov ah,4ch
int 21h
newline proc
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
newline endp
cseg ends
end start
上述实现的功能是循环的输入一个字符,会显示它的asc码,本意是输入“$”时便不再循环。。但是这个程序却终止不了,输入 $ 后还是会继续循环
我调试的时候发现
shl bl,1
mov dl,30h
adc dl,0
mov ah,2
int 21h
这段代码调用21h中断后会把 al设置为30h
但是21h中断的2号功能描述为下:
功能02H
功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,
则将无法判断磁盘是否满
入口参数:AH=02H
DL=待输出字符的ASCII 码
出口参数:无
从描述来看不会改变al的值,但是却改变了,为什么? 请各位高手赐教
;用二进制形式显示所按键的ASC2码
cseg segment
assume cs:cseg
start:
next:
xor ax,ax
mov ah,1
int 21h
call newline
mov bl,al
mov cx,8
tobin:
shl bl,1
mov dl,30h
adc dl,0
mov ah,2
int 21h
loop tobin
call newline
cmp al,"$"
jnz next
mov ah,2
int 21h
mov ah,4ch
int 21h
newline proc
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
newline endp
cseg ends
end start
上述实现的功能是循环的输入一个字符,会显示它的asc码,本意是输入“$”时便不再循环。。但是这个程序却终止不了,输入 $ 后还是会继续循环
我调试的时候发现
shl bl,1
mov dl,30h
adc dl,0
mov ah,2
int 21h
这段代码调用21h中断后会把 al设置为30h
但是21h中断的2号功能描述为下:
功能02H
功能描述:向标准输出设备(如:屏幕)输出一个字符。该输出还可被重定向,如果这样做,
则将无法判断磁盘是否满
入口参数:AH=02H
DL=待输出字符的ASCII 码
出口参数:无
从描述来看不会改变al的值,但是却改变了,为什么? 请各位高手赐教
作者: nimisolo 发布时间: 2011-09-23
我想是因为它内部操作的时候没有把AL还原所以,你就能看到那个了
作者: WJN92 发布时间: 2011-09-23
引用 1 楼 wjn92 的回复:
我想是因为它内部操作的时候没有把AL还原所以,你就能看到那个了
我想是因为它内部操作的时候没有把AL还原所以,你就能看到那个了
但是为什么中断说明上面却没有说明呢?
我和朋友做了个简单的测试,发现2号功能会把dl的值赋给al
求原因。
作者: nimisolo 发布时间: 2011-09-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28