注册 登录
编程论坛 汇编论坛

[求助]请教一个汇编的小问题

Randy_Q 发布于 2006-11-06 11:27, 629 次点击
题目是,要求输入一个数字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做也可以的


还请高手指点啊 不胜感激~~~`
7 回复
#2
wchx2152006-11-06 17:45
.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
#3
Randy_Q2006-11-06 20:06

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

先谢谢啊~~~~

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

#4
Randy_Q2006-11-07 09:15

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

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

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

#5
wchx2152006-11-07 12:45
你可以用除以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
#6
菜鸟上路2006-11-07 12:57
mov       dx,0ffffh   这句为什么是延时啊?
#7
Randy_Q2006-11-07 16:24
以下是引用菜鸟上路在2006-11-7 12:57:37的发言:
mov dx,0ffffh 这句为什么是延时啊?


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

#8
wchx2152006-11-07 17:29

真不好意思,我的那个程序有些错误!运行会发生堆栈溢出的错误。
我已改了: 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

1