首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

求比较简单的歌曲跳跃程序解决办法

2012-02-03 
求比较简单的歌曲跳跃程序求比较简单的歌曲的跳转程序假设已编制好5个歌曲程序,它们的段地址和偏移地址存

求比较简单的歌曲跳跃程序
求比较简单的歌曲的跳转程序假设已编制好5个歌曲程序,它们的段地址和偏移地址存放在数据段的跳跃表SINGLIST中。试编制一程序,根据从键盘输入的歌曲编号1~5,转去执行5个歌曲程序中的某一个。

写了一下,不对.输入5时候,就跳出来来了,而且还想输入别的数字可以提示.
data   segment
        singlist   dw   music1,music2,music3,music4,music5
data   ends
code   segment
        assume   cs:code,ds:data
start:
            mov   ax,data    
            mov   ds,ax                                                                                    
            mov   ah,1
            int   21h
            sub   al, '0 '
            mov   bx,0
            mov   bl,al
            add   bx,bx
            jmp   singlist[bx]
            jmp   exit
           
music1:mov   dl, '1 '
            mov   ah,2
            int   21h
            jmp   exit
music2:mov   dl, '2 '
            mov   ah,2
            int   21h
            jmp   exit
music3:mov   dl, '3 '
            mov   ah,2
            int   21h
            jmp   exit
music4:mov   dl, '4 '
            mov   ah,2
            int   21h
            jmp   exit
music5:mov   dl, '5 '
            mov   ah,2
            int   21h
            jmp   exit
                 
exit:   mov   ax,4c00h    
            int   21h
code   ends
        end   start

[解决办法]
这个还算比较简单吧. 稍对输入部分改进下就可以了:
....
start:
mov ax,data
mov ds,ax
l_keyin:
mov ah,1
int 21h
sub al, '0 '
cmp al, 0
je exit ; 输入 0 结束
cmp al, 5
ja l_keyin ; 输入大于 5 的话, 不理睬
dec al ; 输入 1-5 播放 music1-5, 但地址偏址是以 0 为基, 所以要减 1
mov bx,0
mov bl,al
add bx,bx
call singlist[bx] ; 以子程方式调用相应的播放 这就要求 music1 等须以 ret 返回
jmp l_keyin ; 继续等待按键

music1:mov dl, '1 '
mov ah,2
int 21h
ret ; jmp exit ;* ret 以返回到字符输入循环 以下同
....

热点排行