;----------------------------------------------------------------------------- ;///// SZ (c) mike.dld /////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для определения [нелокализованных] строк с именем {NAME} и содержимым {DATA}. При компиляции строки включаются в выходной файл только если она была использована. Размер (длина) строки доступен как {.SIZE}. ;-------------------- Пример использования: sz str_name_en,'Mike Semenyako',0 sz str_name_ru,'Михаил Семеняко',0 mov eax,str_name_en ; адрес строки mov ecx,str_name_en.size ; размер (длина) строки ;----------------------------------------------------------------------------- ;///// LSZ (c) mike.dld ////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для определения [локализованных] строк с именем {NAME} и содержимым {DATA}. При компиляции строки включаются в выходной файл только если были использованы. Также, включение происходит только в том случае, если символ, предварающий строку, совпадает со значением константы {LANG}. Размер (длина) строки доступен как {.SIZE}. ;-------------------- Пример использования: lsz str_name,\ en,<'Mike Semenyako',0> ,\ ; включается, если lang fix en ru,<'Михаил Семеняко',0> ; включается, если lang fix ru mov eax,str_name ; адрес строки mov ecx,str_name.size ; размер (длина) строки ;----------------------------------------------------------------------------- ;///// SZC (c) mike.dld ////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для определения [нелокализованных] строк с именем {NAME} и содержимым {DATA}. При компиляции строки включаются в выходной файл только если были использованы. Общий размер всех включенных строк доступен как {.SIZE}. Максимальная длина строки из всех включенных доступна как {.MAXL} и для SZC совпадает с {.SIZE}. Каждая строка предваряется байтом (словом,... - {ELSZ}), значением которого является длина следующей далее строки. ;-------------------- Пример использования: szc str_name_en,b,'Mike Semenyako',0 szc str_name_ru,d,'Михаил Семеняко',0 mov eax,str_name_en ; адрес строки mov ecx,str_name_en.size ; размер (длина) строки mov ecx,str_name_en.maxl ; для SZC совпадает с размером строки ;----------------------------------------------------------------------------- ;///// LSZC (c) mike.dld ///////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для определения [локализованных] строк с именем {NAME} и содержимым {DATA}. При компиляции строки включаются в выходной файл только если были использованы. Также, включение происходит только в том случае, если символ, предварающий строку, совпадает со значением константы {LANG}. Общий размер всех включенных строк доступен как {.SIZE}. Максимальная длина строки из всех включенных доступна как {.MAXL}. Каждая строка предваряется байтом (словом,... - {d}), значением которого является длина этой строки. ;-------------------- Пример использования: lszc str_name,b,\ en,<'Mike Semenyako',0> ,\ en,'15-41 Osipenko st.' ,\ ru,<'Михаил Семеняко',0> ,\ ru,'ул. Осипенко, 15-41' mov eax,str_name ; адрес строки mov ecx,str_name.size ; размер (длина) строки mov ecx,str_name.maxl ; для SZC совпадает с размером строки ;----------------------------------------------------------------------------- ;///// MPACK (c) Поддубный /////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для упаковки слов в двойные слова. Для запаковки в {DEST} в качестве операндов {HSRC} и {LSRC} предполагается использование численных констант, регистров или данных с разрядностью до 16 бит. Результатом выполнения макроса является код, помещающий {LSRC} в нижние 16 бит, а {HSRC} в верхние 16 бит 32-битного результирующего {DEST}. Все параметры являются обязательными. ;-------------------- Пример использования: mpack eax,2,25 ; eax = 0x00020019 = 2*65536+25 = 2 shl 16 + 25 mpack [d],eax,ebx ; [d] = eax shl 16 + ebx ;----------------------------------------------------------------------------- ;///// DIFF16 (c) mike.dld /////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для вывода в окно DISPLAY компилятора 32-битного числа, представленного в 16-ричной СС, равного разности между {L1} и {L2}. Число предваряется строкой {TITLE} и отделяется от неё двоеточием. После числа - перевод строки. ;-------------------- Пример использования: diff16 'Current offset',0,$ ; 'Current offset: 0x<значение $>\n' diff16 '25-5',5,25 ; '25-5: 0x00000014\n' ;----------------------------------------------------------------------------- ;///// DIFF10 (c) mike.dld /////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для вывода в окно DISPLAY компилятора 32-битного числа, представленного в 10-ричной СС, равного разности между {L1} и {L2}. Число предваряется строкой {TITLE} и отделяется от неё двоеточием. После числа - перевод строки. ;-------------------- Пример использования: diff16 'Current offset',0,$ ; 'Current offset: <значение $>\n' diff16 '25-5',5,25 ; '25-5: 20\n' ;----------------------------------------------------------------------------- ;///// UNION (c) Privalov //////////////////////////////////////////////////// ;----------------------------------------------------------------------------- Для объявления так называемых смесей, т.е. данных с разными именами и типами, располагающихся по одному физическому адресу. Дополнительная информация: http://board.flatassembler.net/topic.php?t=2152 ;-------------------- Пример использования: struct DEBUG_EVENT .dwDebugEventCode dd ? .dwProcessId dd ? .dwThreadId dd ? union \ .Exception EXCEPTION_DEBUG_INFO ,\ .CreateThread CREATE_THREAD_DEBUG_INFO ,\ .CreateProcessInfo CREATE_PROCESS_DEBUG_INFO ,\ .ExitThread EXIT_THREAD_DEBUG_INFO ,\ .ExitProcess EXIT_PROCESS_DEBUG_INFO ,\ .LoadDll LOAD_DLL_DEBUG_INFO ,\ .UnloadDll UNLOAD_DLL_DEBUG_INFO ,\ .DebugString OUTPUT_DEBUG_STRING_INFO ,\ .RipInfo RIP_INFO ends