|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 9, 2004 12:26:52 Asterix .IF (al>="0" && al<="9") || (al>="A" && al<="F") || (al>="a" && al<="f") Вроде здесь мы уже выяснили как правильно это записать, но сторонники ЯВУ не сдаются ;) |
|
|
Дата: Авг 9, 2004 12:36:56 Black_mirror Да, выяснили, но! ведь так быстрее записать, оптимизация не всегда нужна, да и мало ли какое условие придётся проверять, и ещё сколько строчек кода с'экономлено ;-) |
|
|
Дата: Авг 9, 2004 13:15:13 Asterix > А вот masm имеет такую возможность, можно обработать любой символ строки, взять только нужное и использовать по назначению. Поэтому-то он такой тормозной %) Uri > Для этого фасму надо заиметь возможность возвращать значения из макросов, что его препроцессор делать не может и без существенных изменений не сможет :( Это делается не очень сложно. Например я выделил для таких целей специальный символ __@__ Например, мне нужно вернуть из макроса "eax", я делаю так: __@__ equ eax. Макрос, которому нужен результат знает, какой символ использовать. У меня на этом принципе всё и построено :). Asterix > но! ведь так быстрее записать, оптимизация не всегда нужна, да и мало ли какое условие придётся проверять, Я наоборот, не могу всякие <> использовать, т.к. мне приходится в уме прикинуть, какие флаги будут анализироваться при проверке условия. А без этих "знаков припинания" всё просто т.к. флаг явно прописан в мнемонике :). Вообще, imho нормальная программа использует всякие проверки редко. Их чрезмерность в программе говорит о недостаточной гибкости языка, не позволяющего реализовать это другими методами. |
|
|
Дата: Авг 9, 2004 14:39:05 S_T_A_S_ > Вообще, imho нормальная программа использует всякие проверки редко. Их чрезмерность в программе говорит о недостаточной гибкости языка, не позволяющего реализовать это другими методами. Спорно, и даже очень спорно ;-) Проверки нужны везде и всегда, иначе будет всё падать :-) |
|
|
Дата: Авг 9, 2004 20:21:46 S_T_A_S_ Это делается не очень сложно. Я имею ввиду вариант mov eax,MAKE_LANG_ID(123), то-есть когда макрос вместо себя подставляет какое-либо выражение. |
|
|
Дата: Авг 10, 2004 09:09:27 Дык у мя же есть макрос RGB. Используется: MOV esi,<RGB 0,0,0FFh> А то, что, макрос сам должен подставлять за себя значение.. Забавно наблюдать за HLL, сначала отделили процедуры от функций, а потом опять объединили. Такое ощущуние, что не понимают суть.. |
|
|
Дата: Авг 10, 2004 10:49:06 Есть у кого нибудь макрос для импорта функций для sys драйвера. Такой код , почемуто не всегда катит. section '.idata' import data readable writeable ;********************************************* dd rva FirstThunk dd 0 dd 0 dd rva szNTOSdll dd rva FirstThunk times 5 dd 0 FirstThunk: imp_IoCreateDevice dd rva szIoCreateDevice imp_DbgPrint dd rva szDbgPrint imp_IoCreateFile dd rva szIoCreateFile FirstThunk_end: dd 0 ;********************************************* szIoCreateDevice dw 0 db 'IoCreateDevice',0 szDbgPrint dw 0 db 'DbgPrint',0 szIoCreateFile dw 0 db 'IoCreateFile',0 szNTOSdll db 'ntoskrnl.exe',0 |
|
|
Дата: Авг 10, 2004 15:26:00 ProgramMan А в чём принципиальное отличия построения импорта в kernel mode, кроме обязательного Checksum?\ Может быть проблемы из-за отсутствия выравнивания DWORD'ов. |
|
|
Дата: Авг 18, 2004 10:24:18 Мои пять копеек =)) Автоматическая оптимизация mov reg,0 => xor reg,reg mov reg,1 => xor reg,reg ; inc reg mov reg,2 => xor reg,reg ; inc reg ; inc reg macro MOV dest,arg
{
if @ # arg eq arg
arg
if ~dest eq ..@..
mOV dest,..@..
end if
else if dest eqtype eax
if arg eq 0
xor dest,dest
else if arg eq 1
xor dest,dest
inc dest
else if arg eq 2
xor dest,dest
inc dest
inc dest
end if
else if ~dest eq arg
mOV dest,arg
end if
}
Да, и вопрос еще, чем может быть чревато следующее: macro mov dest,arg
{
MOV dest,arg
}
Я у себя поставил, вроде пока негативных последствий не вижу.... ЗЫ: Если в чем то неправ, сильно не пинайте :) |
|
|
Дата: Авг 18, 2004 20:26:34 zed_0xff > Автоматическая оптимизация Тогда уж imho лучше переработать такой макрос (by Ivan Poddubny): macro mov arg1,arg2
{
if arg1 in <eax,ebx,ecx,edx,esi,edi,ebp,esp>
if arg2 eqtype 0
if arg2 = 0
xor arg1,arg1
else if arg2 = 1
xor arg1,arg1
inc arg1
else if arg2 = -1
or arg1,-1
else if arg2 > -128 & arg2 < 128
push arg2
pop arg1
else
mov arg1,arg2
end if
else
mov arg1,arg2
end if
else
mov arg1,arg2
end if
}Однако, в нём есть небольшая неточность, лучше делать так:
else if arg2 >= -128 & arg2 < 128 > Да, и вопрос еще, чем может быть чревато следующее: macro mov dest,arg { MOV dest,arg } Думаю, проблемы будут с подобными вещами: mov eax,<LoadAccelerators esi,ACCELERATOR.ID> Правильней наверное будет так: macro mov dest,arg
{
MOV dest,<arg>
}Но лучше (и проще) так:
mov fix MOV Резон, почему я для всех макросов использую верхний регистр - когда мне нужна "чистая" инструкция, я пишу её в нижнем регистре - так сразу видно, где что. Жизнь научила =) Кастати, судя по "..@.." у тя старая версия, лучше скачай обновление - скорость компиляции заметно выше. |
|
|
Дата: Авг 18, 2004 20:41:44 · Поправил: S_T_A_S_ |
|
|
Дата: Авг 18, 2004 20:49:20 S_T_A_S_ Ты можешь кстати продублировать свой аттач, скопировав ту надпись про аттач сюда, т.е. слово аттач со всем содержимым что было в скобках [] |
|
|
Дата: Авг 18, 2004 20:53:16 Обновление скачал. Спасибо. быстрее стало, но перестало работать вот это macro mov dest,arg
{
MOV dest,arg
}
и вот это тоже mov fix MOVну и со скобками угловыми аналогично. причем ругается только если есть определение PROC ... ENDP Ругается так: имя_моего_файла [12]: ENDP #Inc/fun.fi [575] ENDP [16]: end if error: unexpected instruction. в этом месте в fun.fi следующее: end if REST __PROC_args__ purge BEGIN,DATA,RET,PROC,.U32,VAR } Куда крутить? Сам попробовал-потыкался, не помогло.. дальше просто некогда экспериментировать. |
|
|
Дата: Авг 18, 2004 20:59:34 Asterix Спасибо, я подозревал это, но пользовался старым дедовским способом - ссылку на картинку ставил отдельно от описания :-) |
|
|
Дата: Авг 18, 2004 21:14:29 zed_0xff В какой из этих 2х строк непосредственно ошибка? И можно ли увидеть целиком PROC ... ENDP ? И ещё, mov fix MOV нужно делать ПОСЛЕ определения макроса MOV, возможно проблема из-за этого. Вообще, обновлённые макросы довольно сильно переаботаны, так что тут ничего удивительного для меня нет. Можно ещё попробовать заменить все mov внутри макросов из "#Inc/fun.fi" на Mov (или mOv, mOV и т.п.) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.093 |