Что я делаю не так - Assembler

Узнай цену своей работы

Формулировка задачи:

Пытаюсь реализовать поиск по названию (чтоб при нахождении музыка вырубалась и наоборот, соответственно). Делаю вот такой вариант исполнения, но почему-то при нахождении процесса происходит крах моей проги. Что не так?? Вот код:
;Получаем имя процесса
;#########################################################################################################
GetProcess proc
LOCAL hSnapshot:dword,processmodule:PROCESSENTRY32  
 
    invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS,0
   .if (eax != INVALID_HANDLE_VALUE)
       mov hSnapshot,eax
       mov [processmodule.dwSize],SIZEOF processmodule
       invoke Process32First, hSnapshot,ADDR processmodule
       .if (eax)
         @@:
           invoke lstrcmpi, ADDR FileName ,ADDR [processmodule.szExeFile]
           .if (eax == 0)
                push    processmodule.th32ProcessID
                pop     pid     
                mov     game_flag,1
                invoke CloseHandle, hSnapshot
                ret
           .else
                mov     game_flag,0                                                                         
           .endif
           invoke Process32Next, hSnapshot,ADDR processmodule
           test eax,eax
           jnz @B       
       .endif
       invoke CloseHandle, hSnapshot   
   .endif
   ret  
   
GetProcess endp
 
;#########################################################################################################

...............................................................................................

  .elseif uMsg == WM_TIMER
    @play:
    .if music_flag == 0  ; Если музыка не играет
     call GetProcess ; Ищем
   .if game_flag == 0 ; Если не нашли...
        cmp xm_sound, 1
        je @stop
        .if music_flag == 0
          Invoke mfmPlay, pMusic ; Врубаем музон :)
          mov music_flag, 1 ; Ставим флаг, что музыка выключена
        .endif
        ret
      .endif
    .endif
 
   @stop: 
    .if music_flag == 1 ; Если музыка играет
      call GetProcess ; Ищем
      .if game_flag == 1 ; Если нашли...
        .if music_flag == 1 ; Ставим флаг, что музон выключен
          Invoke mfmPlay, 0 ; Вырубаем музон
          mov muz_flag, 0
        .endif
        dec xm_sound
      .endif   
    .endif

Решение задачи: «Что я делаю не так»

textual
Листинг программы
push ebp
mov ebp,esp

Объяснение кода листинга программы

  1. push ebp - в стековую память (стек) сохраняется базовый адрес текущей области памяти (EBP).
  2. mov ebp,esp - в EBP записывается адрес ESP (то есть, адрес вершины стека).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы