Всем привет. Ниже есть небольшой код,Таймер+Мессадж. Есть один вопрос. Как сделать вызов функции "Sleep" три раза подряд,со значениями time1,time2 ,time3 и прыгнуть на Мессадж? Только сделать не так: push time1 call [Sleep] push time2 call [Sleep] push time3 call [Sleep] ---------------------------------------------------------------- Код (Text): format PE GUI 4.0 entry start include 'win32a.inc' start: mov ebx,[time1] push ebx call [Sleep] push 0 push text push text push 0 call [MessageBoxA] ret time1 dd 1000 time2 dd 2000 time3 dd 3000 text db 'test',0 section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'api/kernel32.inc' include 'api/user32.inc' Нужно както сделать чтоб напрммер считали в ebx time1 вызвали Sleep вернулись ,считали в ebx time2 вызвали Sleep вернулись.... И после вызова time3 прыгнуть на Мессадж Можно так какнибудь сделать?
Я не совсем понял как Вы и что хотите? Может вам надо макрос invoke? Код (Text): format PE GUI 4.0 entry start include 'F:\fasm\INCLUDE\win32ax.inc' section '.data' data readable writable time1 dd 1000 time2 dd 2000 time3 dd 3000 section '.code' code readable executable ;ñåêöèÿ êîäà proc start invoke Sleep,[time1] invoke Sleep,[time2] invoke Sleep,[time3] invoke MessageBox,0,'text','text',MB_OK ;âûâîäèì ðåçóëüòàò íà ýêðàí invoke ExitProcess,0 endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'F:\fasm\INCLUDE\api\kernel32.inc' include 'F:\fasm\INCLUDE\api\user32.inc'
Ок,попробую объяснить так. Допустим что мне необходимо вызвать 20 раз подряд одну и туже функцию с разными параметрами.В качестве примера возьмем "Sleep" . Можно так: invoke Sleep,[time1] invoke Sleep,[time2] .... .... ..... ..... .. ... ... ... ... ... ..... invoke Sleep,[time10] .... ....... ............. ... .............. ........... invoke Sleep,[time20] invoke MessageBox,0,'text','text',MB_OK Вот.Нечего сложного бери и пиши 20 раз invoke Sleep. А можно сделать чтоб в коде было так .. .. .. .. invoke Sleep,[параметр] invoke MessageBox,0,'text','text',MB_OK чтоб небыло 20 строк "invoke Sleep" а менялся только [параметр] ???
HPC Код (Text): section 'DATA' data readable writable time_queue: time1 dd 1000 time2 dd 2000 time3 dd 3000 ... time20 dd FFFF section 'CODE' code readable executable proc start push ecx mov ecx,20d push esi,offset time_queue next_sleep: invoke Sleep, [esi] add esi,4 loopd short next_sleep pop esi pop ecx invoke MessageBox,0,'Sleep result','All done!',MB_OK invoke ExitProcess,0 endp
немного подредактировал код NoName, а то у меня такое чувство, что у него половина на MASM написана Код (Text): include 'F:\fasm\INCLUDE\win32ax.inc' section '.data' data readable writable time_queue: time1 dd 100 time2 dd 200 time3 dd 300 section 'CODE' code readable executable proc start mov ecx,2 lea esi,[time_queue] next_sleep: push ecx invoke Sleep,dword [esi] add esi,4 pop ecx loopd short next_sleep invoke MessageBox,0,'Sleep result','All done!',MB_OK invoke ExitProcess,0 endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'F:\fasm\INCLUDE\api\kernel32.inc' include 'F:\fasm\INCLUDE\api\user32.inc'
HPC Это можно сделать и другими способами, читай про циклы и команды условных переходов. Кстати у меня там тоже ошибка Код (Text): mov ecx,2 <---должно быть 3, а то цикл выполнится два раза и не будет выполнено Sleep(time3);