· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Почему происходит "зацикливание"?

Посл.отвђт Сообщенiе


Дата: Авг 3, 2004 00:17:00

Как будто, цикл записан правильно,
но почему-то происходит "зацикливание".

Почему в MASM не работает конструкция:

jcxz kkl
mov cx, 4
lb:
invoke Sleep, 350
invoke FlashWindow,hWnd, TRUE
loop lb
kkl:


И ещё, почему не работает:

xor ecx, ecx
mov ecx, 3
th:
invoke Sleep, 350
invoke FlashWindow,hWnd, TRUE
dec ecx
.if ecx>0
jmp th
.endif

а

xor ebx, ebx
mov ebx, 4
th:
invoke Sleep, 350
invoke FlashWindow,hWnd, TRUE
dec ebx
.if ebx>0
jmp th
.endif

работает ???


Дата: Авг 3, 2004 00:54:12

_Sysman_

Посмотри на свой ecx после возврата из API ф-ций: потому и не можешь выбраться из цикла. А третий работает потому, что ebx не изменяется.
Делай push - pop ecx.


Дата: Авг 4, 2004 03:37:02 · Поправил: AsmGuru62

Просто для справки: Win32 API сохраняет EBX,EDI,ESI - так что можно смело ими пользоваться. ESI и EDI хороши для прохода массивов. Елемент массива адресуется через [EBX+ESI] (или одним регистром ESi,EDI), после вызова API они останутся на месте.

И ещё: я мерял как-то (по скорости) LOOP против DEC reg32/JNZ loop_start - LOOP медленнее процентов на %30.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.062