Не могу понять как правильно задать expression для макро .WHILE Написал процедуру: Код (Text): CreateBarBuffer proc cmptDC:HDC,lpPath:LPSTR,imgW:DWORD,imgH:DWORD,cnt:DWORD LOCAL count :DWORD ... ... mov count, 0 .WHILE (count != cnt) ... inc count .ENDW CreateBarBuffer endp Вот проблема в том, что из-за этой записи (count != cnt) не могу скомпилить. Вылетает ошибка: Сорри конечно за глупый вопрос, но опыт у меня в асме небольшой, поэтому решил спросить у старших товарищей))) Компилятор masm
А как тогда реализовать это? (Чтобы я мог получать из аргумента количество повторов цикла). Пробовал делать через стэк, что-то типа: Код (Text): push cnt pop ebx .WHILE (counter != ebx) ... Только цикл не работал после этого )))) может потому что руки кривоваты, точно не знаю)))
Код (Text): CreateBarBuffer proc uses edi cmptDC:HDC,lpPath:LPSTR,imgW:DWORD,imgH:DWORD,cnt:DWORD ... ... xor edi, edi .WHILE (edi != cnt) ... inc edi .ENDW CreateBarBuffer endp
Хм. Сейчас через стэк почему-то заработало. Пойду куплю себе аппарат Елизарова))) А если серьезно, почему могло вообще такое быть? одно время когда делал через стэк дико тупило To2FED Большое спасибо, твой вариант тоже работает
ты делал через EBP(Base Pointer) через который адресуются стек в процедуре, а ты его затёр и получилась у тебя фигня. так делать не надо push cnt pop ebx так нужно делать если ты пересылаешь из памяти в память а поскольку тут фигурирует регистр то можно было бы написать просто mov ebp,esp опять таки ebp не трогай, выбери другой регистр, я в своём примере выбрал edi и добавил строчку uses edi чтобы он восстанавливался при выходе из процедуры