汇编输出一个字符会改变al的值吗?

来源:百度知道 编辑:UC知道 时间:2024/06/19 03:48:45
data segment
;
data ends

stack segment
;
stack ends

code segment
assume cs:code,ds:data,ss:stack
start:
mov al,'b'
mov ah,02h
mov dl,'a'
int 21h
mov dl,al
int 21h
jmp [$]

mov ah,4ch
int 21h
code ends
end start

为什么输出结果是aa,而不是ab

呵呵,还真是。
肯定是int 21h中断修改了al的值。
但看了int 21h中断02h功能号的说明是没有输出参数的。不知道为什么实际使用中却又有。

所以楼主的代码不要这样写了。^_^

刚好网上搜到一个网友的证明。。
http://helinchun.blog.163.com/blog/static/80635722006102811926203/

PS: LS,我想你说的意思是输出字符形式的数字,比如mov dl,'1',实际上存储在dl中的会是字符1对应的ascii码31h,并不是加了30h。这个你可以参考下ascii码表。。^_^

楼主,我也发现了这个现象,输出数字后会自动加30h,为了避免发生错误,你就先压栈保存吧