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

 WASM Phorum —› WASM.PROJECTS —› FASM macro library

<< . 1 . 2 . 3 . 4 . 5 . >>

Посл.отвђт Сообщен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 и т.п.)

<< . 1 . 2 . 3 . 4 . 5 . >>


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