|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 11, 2004 10:48:06 Привет всем! Статья Великого гуру [C] Serrgio / HI-TECH "Win32ASM: "Hello, World" и три халявы MASM32" погрузила меня в глубокие раздумья, натолкнув на банальные с точки зрения продвинутых вопросы. Самый простой и дурацкий: как, например, можно зациклить вызов API, представленный в строчке invoke WriteConsole, hStdout, offset sWriteText, 16d, NULL, NULL. Т.е. как организовать цикл вывода на экран N раз? Поможете? С грустью и уважением. |
|
|
Дата: Мар 11, 2004 11:27:13 serge А без API циклы делать умеешь? |
|
|
Дата: Мар 11, 2004 23:15:32 Да также, только если используешь регистры eax, ecx или edx, то их перед вызовом лучше сохранять, а ещё лучше не использовать: mov ebx, N @@loop: invoke WriteConsole, hStdout, offset sWriteText, 16d, NULL, NULL dec ebx jnz @@loop |
|
|
Дата: Мар 12, 2004 00:21:43 Кажется в некоторых функциях ebx не сохраняется, стрёмно.. |
|
|
Дата: Мар 12, 2004 01:02:05 бррр. а pusha\popa не сделать? |
|
|
Дата: Мар 12, 2004 02:30:45 Нафига? Достаточно: push/pop Но лучше использовать другой регистр, который гарантировано обязан сохранятся функцией. |
|
|
Дата: Мар 12, 2004 02:31:52 Да и вопрос не в том сделать не сделать, нужно корректные примеры постить ;-) |
|
|
Дата: Мар 12, 2004 10:33:42 dragon Ого! Работает! Спасибо! Раз такое дело, может намекнете: ebx - единственно пригодный для организации цикла в данном случае? А как, например, организовать классику с использованием счетчика цикла mov (e)cx, N metka: ... loop metka или более глобально: как использовать любой (не ebx) регистр? Может, я просто путаюсь с push-pop'aми (получаю все время бесконечный цикл)? С уважением. |
|
|
Дата: Мар 12, 2004 10:36:36 serge я просто путаюсь с push-pop'aми (получаю все время бесконечный цикл) Т.е. api не при чем! |
|
|
Дата: Мар 12, 2004 10:36:52 q_q Угу. |
|
|
Дата: Мар 12, 2004 10:54:24 · Поправил: q_q serge ... mov reg,N or reg,reg jz lab1 lab0: push reg ... ; тело цикла pop reg dec reg jnz lab0 lab1: ... |
|
|
Дата: Мар 12, 2004 10:55:18 Win API теоретически не должно изменять EBX, ESI, EDI, EBP, ESP. Так что можно мспользовать любой из них. (ESP лучше не трогать ;-) Если хочешь другой, сохраняй его в стеке: mov ecx, N @@: push ecx invoke WriteConsole, hStdout, offset sWriteText, 16d, NULL, NULL pop ecx loop @b Можно совсем без регистров, иногда полезно: push N ;; локальная переменная-счетчик @@: invoke WriteConsole, hStdout, offset sWriteText, 16d, NULL, NULL dec dword [esp] jnz @b pop edx ;; выравниваем стек. (edx все равно испорчен API, теперь в нем будет 0) Asterix Дык и EBX обязан сохраняться, напиши микрософту ;-) |
|
|
Дата: Мар 12, 2004 12:49:23 S_T_A_S_ выравниваем стек. (edx все равно испорчен API, теперь в нем будет 0) add esp,4? |
|
|
Дата: Мар 12, 2004 15:43:07 Всем thank's! Медитирую... |
|
|
Дата: Мар 12, 2004 17:01:18 [ q_q: add esp,4?] В данном случае pop edx круче, всего 1 byte [ S_T_A_S_: Дык и EBX обязан сохраняться, напиши микрософту ;-)] Да, действительно, вроде сохраняется ;-), я его почему-то мысленно приплёл к eax, edx, ecx ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.171 |