|
|
| Посл.отвђт | Сообщен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 Иногда бывает удобно передать параметр в регистре, но это обычно проблематично, т.к. нужно следить за регистрами и т.п. Вот в таких случаях случаях макросы могут быть очень полезны. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.050 |