论坛: 编程破解 标题: 一个汇编的音乐程序 复制本贴地址    
作者: hackerkill [hackerkill]    论坛用户   登录
有怎么一段汇编程序!是可以有音乐的!可是我调试的时候可以成功!但是就是没有声音!
请知道的朋友帮忙看看!急死我了!我在线等回复!!

stacksg              segment para stack

dw              32 dup(?)

stacksg              ends

datasg              segment

tiger              db              0ah,0dh,'two tiger。$'

tig_freq              dw              2 dup(262,294,330,262)

dw              2 dup(330,349,392)

dw              2 dup(392,440,392,349,330,262)

dw              2 dup(294,196,262),0ffffh

tig_time              dw              10 dup(25),50,25,25,50

dw              2 dup(12,12,12,12,25,25)

dw              2 dup(25,25,50)

datasg              ends

codesg              segment

assume              cs:codesg,ds:datasg,ss:stacksg

start:              mov              ax,datasg

mov              ds,ax

lea              dx,tiger

mov              ah,9

int              21h

lea              si,tig_freq

lea              bp,ds:tig_time

call              play

mov              ah,4ch

int              21h

play              proc

freq:              mov              di,[si]

cmp              di,0ffffh

je              end_ply

mov              bx,ds:[bp]

call              sound

add              si,2

add              bp,2

jmp              freq

end_ply:              ret

play              endp

sound              proc

mov              al,0b6h

out              43h,al

mov              dx,14h

mov              ax,4f38h

div              di

out              42h,al

mov              al,ah

out              42h,al

in              al,61h

mov              ah,al

or              al,3

out              61h,al

wait:          mov              cx,5000

spkr_on:       
loop              spkr_on

dec              bx

jnz            wait

mov              al,ah

out              61h,al

ret

sound              endp

codesg              ends

end              start



[此贴被 寒月清风(hackerkill) 在 06月21日20时34分 编辑过]


[此贴被 286(unique) 在 06月22日15时37分 编辑过]

地主 发表时间: 04-06-21 20:34

回复: hackerkill [hackerkill]   论坛用户   登录
我真的很急啊
希望有高手指点

B1层 发表时间: 04-06-22 13:08

回复: 286 [unique]   版主   登录
title  gensound
public  gensound
cseg    segment para    'code'
        assume  cs:cseg
gensound        proc    far
        push    ax
        push    bx
        push    cx
        push    dx
        push    di
        mov    al,0b6h
        out    43h,al
        mov    dx,12h
        mov    ax,3280h
        div    di
        out    42h,al
        mov    al,ah
        out    42h,al
        in      al,61h
        mov    ah,al
        or      al,3
        out    61h,al
wait1:  mov    cx,55afh
delay:  loop    delay
        dec    bx
        jne    wait1
        mov    al,ah
        out    61h,al
        pop    di
        pop    dx
        pop    cx
        pop    bx
        pop    ax
        ret
gensound        endp
cseg    ends
        end




B2层 发表时间: 04-06-22 15:36

回复: hackerkill [hackerkill]   论坛用户   登录
天啊!我太激动了!对斑竹那么热心的帮助我非常的感激啊!
谢谢了!
但是我把你的源代码汇编完以后!
点击生成的EXE文件
显示是DIVIDE OVERFLOW
请问一下这是什么意思呢?



[此贴被 寒月清风(hackerkill) 在 06月23日01时05分 编辑过]

B3层 发表时间: 04-06-23 01:02

回复: hackerkill [hackerkill]   论坛用户   登录
当然我来这也并不是要你的原代码的!
要不又得挨骂了!
所以我想再贴出一个音乐程序了!
同样遇到了问题!
也请朋友们帮帮忙!

DATAseg SEGMENT para 'data'



      LOWD  DW 131

      LOWDD DW 147,165,175,196,220,247

      MID  DW 262

      MIDD DW 294,330,349,392,440,494

      HGH  DW 523

      HGHD DW 587,659,797,783,879,987,1046


MUS_FREQ DW 440,392,330,392,523,440,392,440

        DW 330,392,440,392,330,262,220,392

        DW 330,2 DUP(294),330,2 DUP(392),440,330

        DW 294,262,392,330,294,262,220,262,196

        DW -1

MUS_TIME DW 37,12,3 DUP(25),2 DUP(12),50

        DW 25,2 DUP(12 ),2 DUP(25),4 DUP(12 ),50

        DW 37 ,12 ,25,2 DUP(12 ),2 DUP(25),50

        DW 37 ,5 DUP(12 ),100

dataseg ends


CODEseg SEGMENT para 'code'

main proc far

    ASSUME DS:DATAseg,CS:CODEseg





START:   


     

     

     
      CALL PLAY_SONG                       

                                 

CALL EXIT                                     
   












PLAY_SONG PROC NEAR



PUSH BP

      PUSH SI

      PUSH BX

      PUSH DI

      PUSH AX

LEA BP,MUS_TIME                             

      LEA SI,MUS_FREQ                           

      JMP FREQ




FREQ:

      MOV AH,01H                                               
      INT 16H

      CMP AH,1CH                                               
      JNZ CONTINUE                                             
      JMP PLAY_END                                             

CONTINUE:

      MOV AH,0CH                                               

      MOV AL,06H

      INT 21H

      MOV DI,[SI]

      CMP DI,-1                                                     
    JE  PLAY_END                                           

      MOV BX,[BP]

      CALL GEN_AUTO                                       
      ADD SI,2

      ADD BP,2                                                     

      JMP FREQ

PLAY_END:

   

      POP AX

      POP DI

      POP BX

      POP SI

      POP BP

      RET

PLAY_SONG ENDP



GEN_AUTO PROC NEAR


      PUSH AX

      PUSH BX

      PUSH CX

      PUSH DX

      PUSH DI



      MOV AL,0B6H

      OUT 43H,AL

      MOV DX,12H

      MOV AX,348CH

      DIV DI

      OUT 42H,AL

      IN AL,61H

      MOV AL,AH

      OUT 42H,AL

      IN AL,61H

      MOV AH,AL

      OR AL,3

      OUT 61H,AL

WAIT2: 

     

      DEC BX

      JNZ WAIT2                                   

      MOV AL,AH                                 
      OUT 61H,AL


     

POP DI

      POP DX

      POP CX

      POP BX

      POP AX

      RET

GEN_AUTO ENDP






EXIT PROC NEAR



      MOV AH,4CH

      INT 21H

        RET

EXIT ENDP

main endp
CODEseg ENDS

    END main


[此贴被 寒月清风(hackerkill) 在 06月23日01时06分 编辑过]

B4层 发表时间: 04-06-23 01:04

回复: programlive [coolcall]   论坛用户   登录
你上面的应该是内存溢出,分配问题吧

B5层 发表时间: 04-06-23 09:57

回复: hackerkill [hackerkill]   论坛用户   登录
这也不是很清楚我!
可以想帮忙找找斑竹的那个程序的错误来吗?
恩!我的第一道程序应该错误不多的!
可以帮忙改下吗朋友?
我的第二的程序是自己写的肯定错误百出!有时间的朋友也可以帮忙看看啊!
我也希望懂这的朋友和我交流啊!我的QQ是  2597027

B6层 发表时间: 04-06-23 10:27

回复: 286 [unique]   版主   登录
你所说的没声音,可能性太多,所以你一点一点排除吧。
1 首先,你的声音应该是从PC Speaker上发出的吧?你看看PC Speaker能不能发声,
c:\>echo ^G^G^G
如果有三声响,表示声音是可以发出的。^G是Ctrl+G。
2 看别的程序是不是能响,置顶贴里有个用键盘模拟电子琴的,你运行试试,看是不是在Windows下这种直接访问端口地址的程序不让运行。
3 把程序简化,只发一个音就退出,看是否发音。
4 。。。。。到时候再说吧。

B7层 发表时间: 04-06-23 17:41

回复: lizhanshuo [lizhanshuo]   论坛用户   登录
斑主 把思路写出来吧


B8层 发表时间: 04-06-23 20:37

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号