+ -
当前位置:首页 → 问答吧 → ax的al值调用出错

ax的al值调用出错

时间:2010-12-14

来源:互联网

CODES SEGMENT
START:
mov ah,1 ;直接显示接收的ascii放到al中去
int 21h
mov ah,0
mov bl,100
div bl
add al,30h ;al为百位上的数字
mov cl,al ;百位移动进bl
mov al,ah
mov ah,0
mov bl,10
div bl
add al,30h ;为十位al
add ah,30h ;个位a
mov bx,ax
mov ah,2
mov dl,10
int 21h
mov dl,13
int 21h
mov dl,cl ;al为百位输出
int 21h
mov dl,al ;问题出在这里mov dl,bl 这里我换成mov dl,al就出错
int 21h
mov dl,bh
int 21h
mov ah,4ch
int 21h
CODES ENDS
  END START
这个程序是正确的,目的是输出刚才通过键盘键入的值的ascii码值,并吧对应的值转成ascii码里的0-9值
可是我发现ax中的al值是我本身可以用到的,虽然前面mov bx,ax已经吧ax中的值复制到了bx中的.但我发现应该可以用ax中的al来输出,于是我修改了.mov dl,bl 换成mov dl,al
可是问题出现了,得到的输出值不对.
不知道,ax中的al值是不是在mov ah,2 以后就不可以在调用呢?为什么输出的值不对.
我通过t跟踪查看了.各个寄存器里的值发现ax中的al值是正确的,可就是显示出来的却不正确.不知道为什么?

作者: cvksbaizhi   发布时间: 2010-12-14

mov ah,2
int 21h
显示完dl中的字符后,将dl的值同时放到al中了。所以,显示字符时,若al中的值有用,要先保存。

作者: shzhfu   发布时间: 2010-12-14

你好.我按照你说的,我修改程序,可是我在使用t跟踪的时侯,发现dx的从mov dl,10时,dx只为000A就没有发生变化了,我翻我手里的书,发现没有介绍更多的查看.我要怎么查看到这个过程呢?

作者: cvksbaizhi   发布时间: 2010-12-14