汇编输出一个字符会改变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
;
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,为了避免发生错误,你就先压栈保存吧