菜鸟求助!望高手指教!

WEIQUAN710 2009-12-31 11:22:54
初学汇编有个问题一直搞不懂!望各位指点,感激不尽!
程序说明:用二进制形式显示所按键的ASCII码.
首先用dos功能调用接受一个字符(int 21h的1号功能)然后通过移位的方法从高到底依次把其ASCII码的各二进制位析出在屏幕上显示出来!
代码:
zfc segment
str db "qing shu ru zhi fu!$" (提示信息)
zfc ends
daima segment
assume cs:daima,ds:zfc
hh proc near ( hh实现回车换行)
mov ah,2h
mov dl,0dh
int 21h
mov ah,2h
mov dl,0ah
int 21h
ret
hh endp
kaishi:mov ax,zfc
mov ds,ax
mov ah,9h
mov dx,offset str
int 21h (显示提示信息)
call hh (回车换行)
mov ah,0ch
mov al,1 (清楚输入缓冲区并调用一号功能接受输入)
int 21h
mov dh,al (这里有个问题下面的2号功能调用会改变al中的值搞不懂,只好转移到dh)
mov ah,2h
mov dl,':'
int 21h
mov cx,8 (这个循环依次显示asscii码的二进制形式)
next: shl dh,1
jc s1
mov ah,2
mov dl,'0'
int 21h
loop next
s1: mov ah,2
mov dl,'1'
int 21h
loop next
mov ax,4c00h
int 21h
daima ends
end kaishi
问题所在:输入字母和数字的话程序是正常的!输入其他字符就会进入死循环!具体情况是用debug调试发现当CX中的值为0时loop依然会转移到next标号处!还有就是上面那个问题!用一号功能接受输入后在调用2号功能,会改变al中的值!(书上说2号功能没有输出参数)
下面这段代码是书上的例题!以上问题依然出现再书上的这段代码中!
cseg segment
assume cs:cseg,ds:cseg
start: mov ah,1
int 21h
call near ptr newlne
mov bl,al
mov cx,8
next: shl bl,1
mov dl,30h
adc dl,0
mov ah,2
int 21h
loop next
mov dl,'b'
mov ah,2
int 21h
mov ah,4ch
int 21
newlne 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
newlne endp
cseg ends
end start
...全文
53 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2010-01-01
  • 打赏
  • 举报
回复
某些中断会改变reg中的值,如有必要建议自己save/load reg。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧