| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 629 人关注过本帖
标题:[求助]请教一个汇编的小问题
只看楼主 加入收藏
Randy_Q
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-6
收藏
 问题点数:0 回复次数:7 
[求助]请教一个汇编的小问题
题目是,要求输入一个数字N:0-9,然后响铃N次

.model small
.stack
.data
str1 db 'bellN=?(0-9)',0dh,0ah,'$'
str2 db 'Over!',0dh,0ah,'$'
.code
.startup
mov dx,offset str1
mov ah,09h
int 21h
xor cx,cx
mov ah,01h
int 21h
mov cl,al
again: mov dl,07h ;响铃
mov ah,02h
int 21h
call getkey
loop again
jmp done
getkey: mov ah,0bh ;等待按键
int 21h
or al,al
jz getkey
ret ;返回again
done: mov dx,offset str2
mov ah,09h
int 21h
.exit 0
end


也不知道是哪错了,反正就是出不来,郁闷啊

我这是做的一个等待按键,主要是区分铃声,不然一次就响完了,听不出几声,要是用NOP做也可以的


还请高手指点啊 不胜感激~~~`
搜索更多相关主题的帖子: 汇编 
2006-11-06 11:27
wchx215
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-9-4
收藏
得分:0 
.model small
.stack
.data
str1 db 'bellN=?(0-9)',0dh,0ah,'$'
str2 db 'Over!',0dh,0ah,'$'
.code
.startup
mov dx,offset str1
mov ah,09h
int 21h
xor cx,cx
mov ah,01h
int 21h
mov cl,al
sub cl,30h ;把asc转换为十进制数字
again: mov dl,07h ;响铃
mov ah,02h
int 21h
call delay
loop again
jmp done
delay: mov dx,0ffffh ;延时
mov ax,0
delay1: sub ax,5
sbb dx,0
jnz delay1
ret ;返回again
done: mov dx,offset str2
mov ah,09h
int 21h
.exit 0
end
2006-11-06 17:45
Randy_Q
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-6
收藏
得分:0 

啊~~~高人~~~~在此拜过~~~~~~

先谢谢啊~~~~

一会试一下~~~呵呵~~~感激不尽

2006-11-06 20:06
Randy_Q
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-6
收藏
得分:0 

呵呵,顺便再问一个小问题,希望有人可以看到啊~~~~

现在dl里面放的是37H,换算成十进制数就应该是55,但是我用

mov ah,02h
int 21h
这样做的话,它就把37H当成ASC码了,结果输出了个数字7,那我要怎么样才可以输出55呢????

2006-11-07 09:15
wchx215
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-9-4
收藏
得分:0 
你可以用除以10,分别求出每位数,然后它们分别转换成asc再显示。我有一个程序,贡你参考:
divdw proc ;除法,防止溢出
push cx
push bx
push di
mov di,0
divdw1: mov bx,ax
mov ax,dx
mov dx,0
mov cx,10
div cx
push ax ;存放高位商
mov ax,bx
div cx
mov cx,dx
pop dx
push cx
inc di
add dx,ax
jz show
jmp divdw1
show: mov cx,di
show1: pop dx
add dl,30h
mov ah,02h
int 21h
loop show1
pop di
pop bx
pop cx
ret
divdw endp
2006-11-07 12:45
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
mov       dx,0ffffh   这句为什么是延时啊?

2006-11-07 12:57
Randy_Q
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-6
收藏
得分:0 
以下是引用菜鸟上路在2006-11-7 12:57:37的发言:
mov dx,0ffffh 这句为什么是延时啊?


呵呵,不是这一句是延迟,而是那整个块都是用来延迟的,用双字 DX.AX (ffff0000)反复的减去5,直到结果为0,但是结果和过程都不显示出来,利用这个指令执行的时间来做延迟的

2006-11-07 16:24
wchx215
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2006-9-4
收藏
得分:0 

真不好意思,我的那个程序有些错误!运行会发生堆栈溢出的错误。
我已改了: divdw proc ;除法,防止溢出
push cx
push bx
push di
mov di,0
divdw1: mov bx,ax
mov ax,dx
mov dx,0
mov cx,10
div cx
push ax ;存放高位商
mov ax,bx
div cx
mov cx,dx
pop dx
push cx
mov cx,dx
inc di
add cx,ax
jz show
jmp divdw1
show: mov cx,di
show1: pop dx
add dl,30h
mov ah,02h
int 21h
loop show1
pop di
pop bx
pop cx
ret
divdw endp

2006-11-07 17:29
快速回复:[求助]请教一个汇编的小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019044 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved