· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Макрос цикла

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


Дата: Окт 7, 2003 00:44:45

Глянул в MASM32 цикл FOR
Он выглядит так
For Variable<1,2,3,4,5>
Endm

А можно ли как-нибудь сделать так:
For Variable=1 to 5

Спасибо.


Дата: Окт 7, 2003 00:49:32

Может лучше использовать While со счётчиком?


Дата: Окт 7, 2003 00:56:29

CyberRat
For Variable=1 to 5
Использовать VB..? К сожалению, ни FASM, ни MASM не поддерживают использование регулярных выражений в макросах :).


Дата: Окт 7, 2003 01:07:49

Да уж, привычка вторая натура. Дело в том что я изучая MASM32 решил написать некоторое подобие компилируемого Бейсика. Вернее сказать конвертер из одного синтаксиса в другой. А затем компиляцию полученного файла с помощью ML. Даже название уже придумал - "Parazite Basic".
Так что, скорее всего, все мои следующие вопросы будут иметь схожий характер.
Не обижайтесь если что не так. Смеяться тоже нежелательно. А то я надуюсь :)

Можете ли вы можете предложить что нибудь схожее. Может простой цикл через CX?


Дата: Окт 7, 2003 01:22:42

Я делал так (вместо ECX можно использовать другой регистр):
mov	ecx,Min
.while	ecx<=Max
	push	ecx
	mov	Variable,ecx
	...
	pop	ecx
	add	ecx,Step
.endw
Получается цикл от Min до Max с шагом Step. Не очень красиво с mov, зато не приходится постоянно использовать push и pop.


Дата: Окт 7, 2003 01:36:24

Хм, в принципе неплохое тело. Спасибо.
А с FOR, значит, прийдётся растаться?


Дата: Окт 7, 2003 01:57:48 · Поправил: Sk. Inc.

С каким FOR?
Если ты имеешь в виду тот, который в MASM'e, то это макрокоманда, и на самом деле, при компиляции, все что находится внутри ее (между for и endm) копируется столько раз, сколько цифер в <>, с заменой Variable на эту цифру.

Пример:
For Variable<1,2,3,4,5> 
	invoke	GetDlgItem,hDlg,Variable
Endm 
Разложится при компиляции в код:
invoke	GetDlgItem,hDlg,1
invoke	GetDlgItem,hDlg,2
invoke	GetDlgItem,hDlg,3
invoke	GetDlgItem,hDlg,4
invoke	GetDlgItem,hDlg,5


Дата: Окт 7, 2003 02:05:06

Что такое макрос я впринципе уже понял. Ну ладно, знач не судьба. Но ведь while это тоже макрос.
Под простым циклом через CX я имел ввиду как это делалось в ДОСе.


Дата: Окт 7, 2003 02:18:14

Да, while тоже макрос, но его отличие в том, что он разложится при компиляции на команды сравнения/установки_флагов (cmp, test, or и т.д.) и на условные переходы (je, jne, jl, jz и т.д.). Поэтому цикл будет выполняться не в процессе компиляции как у for, а в процессе выполнения программы.


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