как организовать цикл, например с 5 повторами? почитал про loop - то что нужно, но не работает у меня =/ написал следующее: Код (Text): format PE GUI 4.0 entry main include 'win32a.inc' section '.data' data readable writeable hello db 'hello', 0 section '.code' code readable executable main: mov ecx, 5 hehe: invoke MessageBox, 0, hello, hello, MB_OK loop hehe invoke ExitProcess, 0 section '.idata' import data readable writeable library kernel32, 'kernel32.dll',\ user32, 'user32.dll' include 'api\kernel32.inc' include 'api\user32.inc' но сообщение показывается далеко не 5 раз посмотрел в олли - ecx нормально присваивается 5, но при первом показе сообщения ecx каким то чудом принимает значение 30000 =/ Где ошибка? спасибо
Попробовал просто запустить msgbox без всяких циклов - ecx и правда принимает значение 30к =/ как быть?
e4key http://wasm.ru/forum/viewtopic.php?pid=296155#p296155 Используем локальную переменную для счётчика, регистр Ebx, Esi, Edi, либо перед вызовом апи сохраняем в стеке Ecx, а после возврата извлекаем его.
Спасибо, Clerk. А какой вообще тогда толк в win32 от loop'a, если приходится каждый раз класть ecx в стек и затем брать его от туда? В таком случае уж лучше наверное с dec + jnz
Код (Text): mov ecx, 5 hehe: push ecx invoke MessageBox, 0, hello, hello, MB_OK pop ecx loop hehe В том случае если в качестве счетчика используется содержимое ebx, edi, esi, ebp, esp можно Код (Text): mov edi,5 hehe: invoke MessageBox, 0, hello, hello, MB_OK dec edi jnz hehe кроме того -- если требуется несколько вложенных циклов, то "приходится каждый раз класть ecx в стек и затем брать его от туда"