當前位置:編程學習大全網 - 源碼下載 - 求匯編程序的mp3源碼(要帶註釋)

求匯編程序的mp3源碼(要帶註釋)

mp3.asm

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 是否包括調試代碼

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DEBUG = 0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Programmed by 羅雲彬, bigluo@telekbird.com.cn

; Website: ctl32.inc

include G:\masm32\include\comdlg32.inc

include G:\masm32\include\winmm.inc

includelib G:\masm32\lib\user32.lib

includelib G:\masm32\lib\kernel32.lib

includelib G:\masm32\lib\comctl32.lib

includelib G:\masm32\lib\comdlg32.lib

includelib G:\masm32\lib\winmm.lib

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; Equ 數據

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DLG_MAIN equ 1000

ID_BROWSE equ 1001

ID_FILE equ 1002

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 數據段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data?

dwFlag dd ?

hWinMain dd ?

hInstance dd ?

hDevice dd ?

szBuffer db 256 dup (?)

stOpenFileName OPENFILENAME <?>

.data

szCaption db "Error...",0

szError db "Error to play MP3 file!",0

szPlay db "&Play",0

szStop db "&Stop",0

szDevice db "MPEGVideo",0

szTitleSave db "Open MP3 file...",0

szExt db '*.mp3',0

szFilter db 'MP3 Files(*.mp3)',0,'*.mp3',0,'All Files(*.*)',0,'*.*',0,0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 子程序聲明

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcDlgMain PROTO :DWORD,:DWORD,:DWORD,:DWORD

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; 代碼段

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code

if DEBUG

include Debug.asm

endif

include Win.asm

;********************************************************************

_GetFileName proc

mov stOpenFileName.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST

mov stOpenFileName.lStructSize,SIZEOF stOpenFileName

mov eax,hWinMain

mov stOpenFileName.hWndOwner,eax

mov stOpenFileName.lpstrFilter,offset szFilter ;擴展名

mov stOpenFileName.lpstrFile,offset szBuffer ;文件名緩沖

mov stOpenFileName.nMaxFile,255 ;文件名緩沖長度

mov stOpenFileName.lpstrInitialDir,0

mov stOpenFileName.lpstrTitle,offset szTitleSave

mov stOpenFileName.lpstrDefExt,offset szExt

invoke GetOpenFileName,offset stOpenFileName

.if eax == FALSE

ret

.endif

invoke SetDlgItemText,hWinMain,ID_FILE,addr szBuffer

call _StopPlayMP3

ret

_GetFileName endp

;********************************************************************

_PlayMP3 proc

local @stMCIOpen:MCI_OPEN_PARMS

local @stMCIPlay:MCI_PLAY_PARMS

mov @stMCIOpen.lpstrDeviceType,offset szDevice

mov @stMCIOpen.lpstrElementName,offset szBuffer

invoke mciSendCommand,0,MCI_OPEN,MCI_OPEN_TYPE or MCI_OPEN_ELEMENT,addr @stMCIOpen

mov eax,@stMCIOpen.wDeviceID

mov hDevice,eax

mov eax,hWinMain

mov @stMCIPlay.dwCallback,eax

invoke mciSendCommand,hDevice,MCI_PLAY,MCI_NOTIFY,addr @stMCIPlay

.if eax == 0

invoke SetDlgItemText,hWinMain,IDOK,offset szStop

mov dwFlag,1

.else

invoke MessageBox,hWinMain,addr szError,addr szCaption,MB_OK

.endif

ret

_PlayMP3 endp

;********************************************************************

_StopPlayMP3 proc

local @stMCIStop:MCI_GENERIC_PARMS

mov eax,hWinMain

mov @stMCIStop.dwCallback,eax

invoke mciSendCommand,hDevice,MCI_STOP,MCI_NOTIFY,addr @stMCIStop

invoke mciSendCommand,hDevice,MCI_CLOSE,MCI_NOTIFY,addr @stMCIStop

invoke SetDlgItemText,hWinMain,IDOK,offset szPlay

mov dwFlag,0

ret

_StopPlayMP3 endp

;********************************************************************

_ProcDlgMain proc uses ebx edi esi, \

hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD

mov eax,wMsg

.if eax == WM_CLOSE

invoke EndDialog,hWnd,NULL

.elseif eax == WM_INITDIALOG

mov eax,hWnd

mov hWinMain,eax

invoke _CenterWindow,eax

invoke SendDlgItemMessage,hWinMain,ID_FILE,EM_SETREADONLY,TRUE,NULL

.elseif eax == WM_COMMAND

mov eax,wParam

.if eax == ID_BROWSE

call _GetFileName

.elseif eax == IDOK

.if dwFlag == 0

call _PlayMP3

.else

call _StopPlayMP3

.endif

.endif

.else

;********************************************************************

; 註意:對話框的消息處理後,要返回 TRUE,對沒有處理的消息

; 要返回 FALSE

;********************************************************************

mov eax,FALSE

ret

.endif

mov eax,TRUE

ret

_ProcDlgMain endp

;********************************************************************

start:

invoke InitCommonControls

invoke GetModuleHandle,NULL

mov hInstance,eax

invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0

invoke ExitProcess,NULL

end start

win.asm

.386

.model flat,stdcall

option casemap:none

include \masm32\include\windows.inc

include \masm32\include\user32.inc

include \masm32\include\kernel32.inc

includelib \masm32\lib\user32.lib

includelib \masm32\lib\kernel32.lib

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

.data

ClassName db "SimpleWinClass",0

AppName db "Our First Window",0

.data?

hInstance HINSTANCE ?

CommandLine LPSTR ?

.code

start:

invoke GetModuleHandle, NULL

mov hInstance,eax

invoke GetCommandLine

mov CommandLine,eax

invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT

invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

LOCAL wc:WNDCLASSEX

LOCAL msg:MSG

LOCAL hwnd:HWND

mov wc.cbSize,SIZEOF WNDCLASSEX

mov wc.style, CS_HREDRAW or CS_VREDRAW

mov wc.lpfnWndProc, OFFSET WndProc

mov wc.cbClsExtra,NULL

mov wc.cbWndExtra,NULL

push hInstance

pop wc.hInstance

mov wc.hbrBackground,COLOR_WINDOW+1

mov wc.lpszMenuName,NULL

mov wc.lpszClassName,OFFSET ClassName

invoke LoadIcon,NULL,IDI_APPLICATION

mov wc.hIcon,eax

mov wc.hIconSm,eax

invoke LoadCursor,NULL,IDC_ARROW

mov wc.hCursor,eax

invoke RegisterClassEx, addr wc

INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\

WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\

hInst,NULL

mov hwnd,eax

invoke ShowWindow, hwnd,SW_SHOWNORMAL

invoke UpdateWindow, hwnd

.WHILE TRUE

invoke GetMessage, ADDR msg,NULL,0,0

.BREAK .IF (!eax)

invoke TranslateMessage, ADDR msg

invoke DispatchMessage, ADDR msg

.ENDW

mov eax,msg.wParam

ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_DESTROY

invoke PostQuitMessage,NULL

.ELSE

invoke DefWindowProc,hWnd,uMsg,wParam,lParam

ret

.ENDIF

xor eax,eax

ret

WndProc endp

end start

  • 上一篇:數據可視化:打破信息孤島,釋放數據動能
  • 下一篇:高鐵上怎麽點肯德基
  • copyright 2024編程學習大全網