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

 WASM Phorum —› WASM.ASSEMBLER —› tasm2masm migration

<< . 1 . 2 .

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


Дата: Июл 17, 2004 18:52:50

„Какой смысл в invoke, если он такой кривой :(“
каждому свое :) можно и свой макрос написать. Но необходимости в таких хитрых вещах у меня лично никогда не возникало.
То что там сожет быть 2 аргумента и так было понятно :) Но такой код достаточно тяжело отлаживать и искать ошибку - я лично не вижу ни одного довода писать такой код.

„В FASM invoke может ложить в стек и qword'ы и вообще всё что хочешь.“
Я бы это плохим стилем назвал :) Раз фасм позволяет такие вольности в стиле - это не для меня


Дата: Июл 17, 2004 19:49:55 · Поправил: S_T_A_S_

> „можно и свой макрос написать.“

Ага, я писал макрос coinvoke на MASM, поскольку те, которые я видел, не позволяли использовать некоторые регистры (вроде EAX) в качестве аргументов. С ручным разбором аргументов на предмет ADDR и т.п. 8-()
Кстати там и использовался приём подобный push panic - для автоматической проверки возращаемых значений COM методов на предмет ошибки, что бы не писать после каждого вызова .IF . Именно это и привело меня к поискам других ассемблеров :).


> „Я бы это плохим стилем назвал :) Раз фасм позволяет такие вольности в стиле“

Стандартный invoke работает только с DWORD. Для того, чтобы использовать QWORD, нужно соответственно модифицировать макрос. При этом можно делать проверку кол-ва аргиментов, их размера и т.п. (по желанию - кому как нравится).

Сейчас я работаю над тем, что бы можно было делать такие вещи:
proc foo, EBX, arg, arg2
.....
endp

invoke  foo 0,1,2  ; будет преобразовано к следующему коду:

push 2
push 1
xor  EBX, EBX
call foo

; а ещё возможно делать и так:
foo  0,1,2

Иногда бывает удобно передать параметр в регистре, но это обычно проблематично, т.к. нужно следить за регистрами и т.п.
Вот в таких случаях случаях макросы могут быть очень полезны.

<< . 1 . 2 .


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