purebasic.info

PureBasic forum
Текущее время: Ср янв 24, 2018 2:29 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 27, 2007 10:12 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
кстати, нет ни у кого материалов по ASM (FASM) начиная с самого примитивного уровня? а то я ищу материалы, пытаюсь в них разобраться, но очень туго получается :oops: уже не одна пол-литра ушла...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 27, 2007 11:41 pm 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
22vlad писал(а):
кстати, нет ни у кого материалов по ASM (FASM) начиная с самого примитивного уровня? а то я ищу материалы, пытаюсь в них разобраться, но очень туго получается :oops: уже не одна пол-литра ушла...

http://wasm.ru - нет ничего лучше :) Имеет ко всему прочему рАзвитый форум...

А вот кстати тутор OpenGL+FAsm:
http://wasm.ru/print.php?article=OpenGLbyTylerDurden


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 27, 2007 11:47 pm 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
И еще.. ФАсм с одной стороны наследует многое от классических ассемблеров.. С другой стороны слегка отличается.

Самое главное, имхо, важно знать с чем едят регистры и стек, остальное все приложится :)

Будут вопросы, помогу чем смогу :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт сен 27, 2007 11:57 pm 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
История под названием fasm
Дата: 25/07/05; Перевод: CodeWorld;
Оригинальный источник: www.sysbin.com


Расскажите о себе

Меня зовут Томаш Гриштар, сейчас мне 25, живу в Кракове, где я аспирант Ягеллонского университета. Моё обучение сконцентрировано на математике с небольшим применением теории ИТ.

Почему вы решили написать свой ассемблер и какие основные концепции были заложены в него?

Как я упомянул выше, одна из основных причин написания fasm-а была необходимость в хорошем инструменте для разработки моей ОС, с последующей возможностью переноса fasm-а в качестве родной среды разработки. Первоначально я использовал TASM, исключительно в режиме Ideal. Это был замечательный ассемблер, но недостовало некоторых вещей, которые мне были нужны при написании ОС - плоский бинарный формат на выходе, возможность использования редких опкодов и т.п. Потом я наткнулся на NASM и хотя он обладал частью необходимых характеристик, мне он не понравился по очевидной причине: те вещи, которые я использовал в TASM-е отсутвовали в NASM-е - например контроль за размером операндов или именование параметров для макро-инструкций. Всё-же я позаимствовал некоторые идеи у NASM, но главным вдохновителем при проектировании fasm-а оставался режим TASM-а Ideal. Ещё одна из базовых концепций моего ассемблера была легкая переносимость, которую я достиг путём разделения системно-независимого ядра от интерфейса, содержащего в себе элементарные функции доступа к файлам и т.д. Интерфейс может быть переписан для любой ОС, которая может выполнять программы в плоском адресном пространстве. И поскольку это не отъемленная черта всех серьёзных операционных систем для платформ x86, я знаю, что fasm может быть перенесён в любую из них. Но всё-же fasm портиван не во все операционные системы, например я не чувствую реальной необходимости переписывать интерфейс для BSD систем - я использую версию Linux fasm-а в режиме совместимости, даже на OpenBSD он работает безупречно. Также fasm не был портировал в OS/2, так как я никогда не знал об этой системе много и даже о форматах файлов используемых в OS/2 имею поверхностное представление.

Для любопытных: первоначально flat assembler был регистро-чувствительным, в том числе к мнемоническим инструкциям, регистрам и директивам. Все должно было быть в нижнем регистре и все отображаемые сообщения так же были в нижнем регистре. Позже fasm перестал быть регистро-чувствительным, но все сообщения попрежнему выводились в нижнем регистре. И вы можите заметить то, что я продолжаю писать "fasm" и "flat assembler" в нижнем регистре. Это преднамерено.

Перескажите краткую историю развития FASM-a?

В первом же файле, перед тем как написать первую строчку кода я воспользовался функцией редактора DOS Navigator-а для вставки текущей даты и времени в начало файла. Поэтому я могу сказать вам очень точное время, когда я начал разрабатывать flat assembler - 1999-03-23, 14:24:33. А первая версия, которая могла себя перекомпилировать была готова 1999-05-04 (я могу сказать это по дате последних изменений в файлах исходников), в этом состояние он оставался долгое время (именно его я перенёс в свою ос, но эта версия была потеряна со всей системой). Спустя год (в 2000) я вернулся к этому, немного почистил и выложил fasm в интернете на случай если кто нибудь действительно найдёт его полезным (после неудачуи с собственной ОС). Я отправил сообщение об нём в переписку разработчиков FreeDOS и к щастью оно еще в архивах - http://marc.theaimsgroup.com/?l=freedos ... 003959&w=2. Сообщение датировано 2000-03-15. В том архиве больше 2-х моих сообщений о fasm-e и в последнем анонсировался выход 1-ой версии (2000-06-16). Позже, после того как я реализовал выходной формат PE и выпустил Win32 версию (первая такая версия была 1.04 закрепленная датой 2000-08-10), интерес к fasm'у вырос заметно и я переехал на форум Win32ASM Community, где через некоторое время мне дали под форум для fasm-а, продолжительное время именно он являлся главным местом поддержки моего ассемблера, пока я не создал свой собственный официальный форум посвященный полностью fasm-у (это было 2003-06-16).

Почему в FASM-е долгое время небыло оператора dup?

Это может показаться немного странным решением, но хотя я использовал идеал режим TASM-а как основной при проектировании синтаксиса fasm-а, я всё таки решил использовать TIMES в стиле NASM-а вместо оператора DUP. Это одна из характеристик NASM-а, которая мне понравилась своей универсальностью и вообще она намного проще в реализации. Так пробыло очень долго, с тех пор я привык использовать TIMES, из-за чего реализация DUP стала не такой уж критичной и я сконцентрировался на реализации других важных свойств. Потом я вообще забыл про DUP, но недавно, после просмотра нескольких вопросов наподобие "Как сделать DUP в fasm-е", где в ответе обычно предлагалось использовать директиву TIMES, я решил, что пора бы реализовать и DUP наконец-то. Во-первых, это еще один шаг делающей синтаксис fasm-а более похожим на Ideal TASM-а. Во вторых, DUP более понятный и гибкий для определения данных чем TIMES (хотя TIMES всё ещё остаётся очень полезным для повторения каких-нибудь инструкций, чего нельзя сделать с помощью DUP), например с DUP-ом вы можете смешивать повторяющеися и неповторяющеися данные в одном определении. Теперь fasm поддерживает DUP - как это должно было быть с самого начала.

Чем синтаксис FASM-а отличается от других ассемблеров?


Когда я проектировал fasm я опирался не только на TASM, несколько решений были взяты из NASM-а и в результате получилась некоторая смесь, похожая по немногу на каждого из них, но в тоже время отличающаеся от обоих. Кроме того fasm имеет свои специфические возможности, например директива VIRTUAL, обнаружение мертвого кода и синтаксис макроинструкций отличающийся от любого другого ассемблера, хотя первоначально он был основан на синтаксисе Ideal TASM-а, с единственным различием - содержание макросов в fasm-е заключается в квадратные скобки, вместо ключевого слова ENDM. В остальном стандартные правила такие как именование параметров и директива LOCAL такая же как и в TASM. Но когда я совершенствовал макросы, они должны были быть совершенно другими - основаная причина заключается в том , что fasm не работает с исходным текстом напрямую, а токенезирует прежде, чем он будет последовательно пройден препроцессором. По этой причине макросы fasm-а должны базироваться на токенизации, из-за чего их не возможно обработать как простую строку. Первоначально токенизация была сделана с целью ускорения предварительной обработки и парсинга, но синтаксичей анализатор fasm-а обработовал все заново. Теперь же это внутренняя часть fasm-а, благодаря чему модуль ассемблера может показать высокие результаты обработки. И благодаря этому же, даже когда fasm должен сделать несколько проходов, чтобы правильно обработать код, он делает это очень быстро. Вы можете заметить, что многие синтаксические решения fasm-а были сделаны в силу его внутренного устройства, чтобы получить минимальные затраты времени на компиляцию.

Вы ощущаете борьбу FASM-а и NASM-а? Как вы относитесь к ней?


Между прочем написание fasm-а частично было моим ответом на разочарование, которое я имел с NASM-ом - у него были хорошие качества, но недоставало важных для меня вещей, таких как контроль размера переменных и автоматическая оптимизация смещений. Еще мне очень ненравиться стиль макросов в NASM-е. В результате fasm получился чем-то средним между TASM-ом и NASM-ом, кроме того со своими свойствами, добавленными позже. Однако основной синтаксис очень похож на синтаксис NASM-а, который легко реализовался в fasm-е. В отличии от синтаксиса MASM. Но недавно я написал новые макро-инструкции для эмуляции синтаксических конструкций TASM/MASM, которые раньше не поддерживал fasm. А вообще макросредства fasm-а способны эмулировать любой синтаксис и недавно я написал макросы для эмуляции макро-синтаксиса NASM-а (пока с фиксированном кол-вом параметров). Но всё таки NASM более популярный, потому что для него написано огромное кол-во материалов, что сделало его широко распространённым - тем неменее fasm меньше, быстрее и имеет достаточный набор качеств чтобы стать твёрдым конкурентом NASM-а. Если быть честным, то я знаю совсем малую часть NASM-овских возможностей, которых нет в fasm-е (на архитектуре не отличной от x86). Кстати fasm на x86 намного портабельней - он может быть перенесён в любую ОС защищенного режима, в то время как для NASM-а критично наличие библиотеки С доступной для этой ОС.

Какие у вас ближайшие планы?


Большая часть моих планов сосредоточена на создание документации, у fasm-а с этим еще есть проблемы. В последнее время я добавил в fasm много новых возможностей и теперь могу немного передохнуть, а затем возьмусь за написание небольших документаций.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 28, 2007 12:00 am 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Сорри за флуд, но мож кому интересно :)


Последний раз редактировалось SofT MANiAC Пт сен 28, 2007 12:04 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 28, 2007 12:03 am 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Цитата:
Flat Assembler — инструмент разработчика

Почему именно FASM? Для этого выбора есть несколько причин. Во-первых, он является одним из наиболее динамично развивающихся компиляторов. Его автор Tomasz Grysztar регулярно выкладывает новые версии на свою страничку http://fasm.sourceforge.net/, откуда их может получить любой желающий. Кстати, архив версии 1.46 от 9 апреля 2003 года занимает всего 240 Кб, если предполагается работать в режиме командной строки DOS, и 550 Кб — если разработку планируется вести в среде Windows. И это при том, что в дистрибутив для Windows входит подробная документация в формате PDF, которая содержит описание как самого компилятора, так и машинных инструкций процессоров Intel включая набор команд MMX, SSE, SSE2 и AMD 3DNow! Все перечисленные команды могут быть использованы в программах на FASM.
Стоит отметить, что работать компилятор FASM будет только на компьютерах, оснащенных процессором не хуже Intel 80386, однако сегодня это вряд ли можно отнести к недостаткам. Тем более, что он позволяет генерировать код как для самых современных процессоров, так и для стареньких Intel 8086.

На этом этапе нужно обратить внимание на еще одну особенность рассматриваемого продукта. Дело в том, что FASM является компилятором и компоновщиком "в одном флаконе". То есть программист, использующий его, не нуждается ни в каких дополнительных утилитах. На входе FASM получает текст программы на языке ассемблера, а на выход выдается машинная программа в формате COM или EXE для DOS, DLL или PE (Portable Executable) для Windows, уже готовая к выполнению.
Такой механизм работы FASM вызывает неоднозначную оценку. С одной стороны, это упрощает процесс получения исполняемого файла, с другой — делает невозможным использование традиционных OBJ- и LIB-модулей. Приходится накапливать подпрограммы в текстовых файлах и подключать к основному модулю с помощью директивы INCLUDE. Такая технология ведет к неизбежному замедлению процесса компиляции, однако справедливости ради нужно отметить, что на современной технике это замедление не является критическим. Естественно, эффективность генерируемого машинного кода при этом нисколько не страдает.

В программах на языке ассемблера для FASM могут использоваться машинные инструкции в форме, аналогичной MASM или TASM. Косвенная адресация всегда обозначается заключением операнда в квадратные скобки. Для наглядности покажем несколько примеров.
mov eax, [ebp-4] загружает в регистр eax 32-битное число, находящееся по адресу, который хранится в ячейке памяти с адресом (ebp-4);
mov eax, var_1 загрузит в регистр eax адрес переменной var_1, тогда как для загрузки значения переменной нужно воспользоваться командой mov eax, [var_1]
Описание переменных выполняется традиционным способом в виде инструкции:

var_name <директива_описания> value
или
var_name <директива_резервирования> <количество>

где var_name — метка, задающая имя переменной; <директива_описания> и <директива_резервирования> — зарезервированное слово из таблицы 1, которое определяет размер памяти, отводимой для хранения переменной; value — значение, присваиваемое переменной или символ "?" для неинициализируемых переменных; <количество> — количество резервируемых ячеек памяти, размер которых определяется <директивой_резервирования>.
Если первый способ позволяет создавать инициализированные переменные, то второй удобно использовать в целях резервирования памяти для массивов (вместо оператора DUP, используемого в MASM).


Например:
ARRAY_SIZE = 50
Message db "Hello, world!", 0
ArrayOfHandle rd ARRAY_SIZE

Результатом компиляции указанных строк станет определение строковой переменной Message в формате ASCIIZ (с нулевым символом-ограничителем) и резервирование 4 * 50 = 200 байт памяти для массива ArrayOfHandle.
Чтобы описать структуру, можно воспользоваться оператором struc. Пусть, например, нам нужна структура для хранения информации о колонке списка ListView с целью ее использования в вызовах функций Win32API. Нет ничего проще. Сначала описывается тип структуры:

UINT equ dd ?
int equ dd ?
LPTSTR equ dd ?

struc LV_COLUMN {
.mask UINT
.fmt int
.cx int
.pszText LPTSTR
.cchTextMax int
.iSubItem int
}

а затем — переменная, использующая введенный тип:

lv_Column LV_COLUMN

При работе с FASM нужно помнить, что этот компилятор, в отличие от MASM и TASM, является регистрозависимым, то есть строчные и прописные буквы различаются. Поэтому, например, идентификаторы "lv_Column" и "LV_COLUMN" для него совершенно различны, и конфликта имен не возникает.
Еще одно интересное понятие, используемое в FASM, — виртуальная структура, которая реализуется с помощью директивы virtual следующего формата:

virtual [at <адрес>]
... ... ...
<описание данных>
... ... ...
virtual end

Виртуальная структура не резервирует места в памяти, она только описывает способ трактовки данных, содержащихся в области памяти, начинающейся с адреса <?????> (или с текущего адреса, если этот параметр опущен). Виртуальные структуры очень удобно использовать в ситуациях, когда адрес реальной структуры, с полями которой нужно работать, находится в регистре, например, bx:

virtual at bx
HiWord dw ?
LoWord dw ?
virtual end
mov dx, [HiWord] ; компилируется как mov dx, [bx]
mov ax, [LoWord] ; компилируется как mov ax, [bx + 2]

Учитывая невозможность компоновки программы из объектных файлов встает вопрос: как обеспечить уникальность меток в подпрограммах, подключаемых с помощью директивы INCLUDE? Здесь FASM предлагает очень удобный способ описания локальных меток, а именно: любая метка, которая начинается с символа "." (точка), является локальной по отношению к предшествующей глобальной метке. Это позволяет сосредоточить внимание только на уникальности меток в контексте подпрограммы. В то же время на локальную метку можно ссылаться из любого места программы по ее полному имени, которое формируется следующим образом: <глобальная_метка>.<локальная_метка>, где <глобальная_метка> — первая глобальная метка, предшествующая описанию локальной метки (своего рода префикс), <локальная_метка> — собственно локальная метка. Поясним сказанное небольшим примером:

; Первая подпрограмма.
;----------------------
Subroutine_1:
...... ...
mov [.var1], ax ; подразумевается Subroutine_1.var1
...... ...
ret
.var1 dw ? ; полное имя — Subroutine_1.var1

; Вторая подпрограмма.
;----------------------
Subroutine_2:
...... ...
xor eax, eax
mov [ax], [Subroutine1.var1]
mov [.var1], eax ; подразумевается Subroutine_2.var1
...... ...
ret
.var1 dd ? ; полное имя — Subroutine_2.var1

Если идентификатор метки начинается не с одной, а с двух точек, такая метка является глобальной, за исключением того, что она не начинает своего контекста локальных меток. То есть локальные метки, следующие за таким описанием, будут продолжать контекст предшествующей "обычной" глобальной метки.
Для организации LOOP-циклов очень удобно использовать так называемые анонимные метки "@@". В программе можно ссылаться на предшествующую или последующую анонимную метку с помощью идентификаторов "@b" (или "@r") и "@f" соответственно (по-видимому, такие идентификаторы произошли от слов "back" ("reverse") — "назад" и "forward" — "вперед"):

mov cx, 255
@@:
...... ...
...... ...
loop @b

В процессе разработки приложений для Windows программист неизбежно сталкивается с необходимостью обращения к функциям API. Для таких целей FASM предлагает invoke — синтаксис, аналогичный используемому в MASM. Вот простейший, но полностью функциональный пример из пакета FASM, реализующий вывод на экран диалогового окна:

; example of simplified Win32 programming
; using complex macro features

include '%include%/win32ax.inc'

.code

start:
invoke MessageBox, HWND_DESKTOP, \
"Hi! I'm the example program!",\
"Win32 Assembly",MB_OK
invoke ExitProcess,0

.end start

Такая простота стала возможной благодаря удачному набору директив описания макроинструкций, реализованных в FASM. Кстати, как читатели уже, наверное, догадались, чтобы записать оператор на нескольких строках, в местах разрыва нужно вставить символ "\" (обратный слэш).
Макроинструкции в ассемблере FASM описываются с помощью директивы MACRO, имеющей следующий синтаксис:

macro <name> <arg1>,... , <argN>, [<gr_arg1>, ..., <gr_argM>] {
common
... ... ...
<операторы секции common>
... ... ...
forward
... ... ...
<операторы секции forward>
... ... ...
reverse
... ... ...
<операторы секции reverse>
... ... ...
}

Внимание! Квадратные скобки в описателе макроинструкции являются элементом синтаксической конструкции, а не признаком необязательных параметров.
Как же это описание работает? Если не используются групповые аргументы (группа аргументов, заключенная в квадратные скобки), то необходимость в использовании секций отпадает, и описание макроинструкции напоминает определение подпрограммы в языках высокого уровня: после директивы macro указывается имя макроинструкции и список аргументов, которые играют роль формальных параметров.
При использовании групповых аргументов все несколько сложнее. В этом случае при записи макроинструкции первые N аргументов обрабатываются как обычные аргументы. Оставшиеся аргументы разбиваются на группы по M штук (это означает, что количество оставшихся аргументов должно быть кратно M), и способ обработки каждой такой группы определяется секцией.
Содержимое секции common разворачивается только один раз, для всех аргументов сразу. Содержимое секции forward разворачивается столько раз, сколько получилось групп аргументов. Причем сначала берутся первые M аргументов, следующие за <argN>, затем — следующие M аргументов — и так до тех пор, пока список не будет исчерпан. Секция reverse обрабатывается аналогично секции forward, только список аргументов просматривается с конца: сначала берутся последние M аргументов, затем — предыдущие M аргументов, и так далее, пока не останется N обычных аргументов.
Реализованный в FASM механизм макроинструкций, использующий групповые аргументы, является мощным и удобным средством и позволяет, например, написать макроинструкции для описания подпрограмм с произвольным порядком обработки как входных параметров, так и локальных переменных для подключения всевозможных ресурсов к приложениям Windows, реализовать такие конструкции языков высокого уровня, как ветвление и циклы. Все перечисленное уже создано автором компилятора и поставляется в виде подключаемых файлов в составе дистрибутивного пакета. Используя же прилагающуюся документацию, которая уже упоминалась в начале статьи, при наличии небольшой толики терпения и базовых знаний английского языка читателям не составит труда разобраться с примерами и изучить возможности директив, которые не были рассмотрены в этой обзорной статье.

В заключение несколько слов о впечатлениях, полученных в процессе знакомства с компилятором FASM. Автор считает, что наиболее целесообразно его использование в качестве учебного компилятора на практических занятиях по системному программированию для процессоров семейства Intel. Аргументом в пользу такого выбора может служить простота входного текста на языке ассемблера по сравнению с компиляторами MASM и TASM, которая позволяет сразу перейти к разработке программ и сосредоточить внимание на предмете изучения, не отвлекаясь на процедуры компиляции/компоновки, которые на первых шагах обучения только загружают учащихся избыточными и хаотичными сведениями. С этой точки зрения он может служить низкоуровневым аналогом пакета Turbo Pascal. Кроме того, он поддерживает расширенные наборы инструкций, присущие последним моделям процессоров Intel.
Так же, как Turbo Pascal, компилятор FASM позволяет создавать реальные коммерческие приложения, причем для нескольких широко распространенных операционных систем. Большим плюсом в этой связи является его бесплатность. FASM имеет средства, позволяющие создавать модульные программы с использованием директив INCLUDE и локальных меток, однако не поддерживает объектных модулей.
Последний факт может насторожить профессионалов, и они сделают свой выбор в пользу продукта фирмы Microsoft.
В любом случае FASM является интересной разработкой, на которую стоит обратить внимание как профессиональным программистам, так и всем желающим познакомиться с увлекательным процессом программирования на языке ассемблера, который никогда не утратит своей актуальности.

Игорь Орещенков, 2003 г.

© компьютерная газета


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 28, 2007 12:05 am 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
И напоследок - русский туториал по фасму - http://mythrillus.land.ru/tajga-tut/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт сен 28, 2007 12:23 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
спасибо, почитаю (наверное уже завтра)



создам новый топик про FASM - туда перенесу большую часть сообщений отсюда


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб сен 29, 2007 1:09 pm 
Не в сети
док

Зарегистрирован: Сб фев 17, 2007 10:01 pm
Сообщений: 102
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Уроки iczelion переделаные под fasm .
В двух вариантах.
http://ifolder.ru/1478334

Вот еще один перевод мануала в hlp.
http://www.cracklab.ru/f/files/0dd8_07. ... LAB.rU.tgz


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 01, 2007 11:10 am 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
говноифолдер... архив тянется битый... может сюда зальешь? всегото 600 кб... :roll: :oops:

_________________
Люди!! Уважайте друг друга!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 03, 2007 8:48 pm 
Не в сети
док

Зарегистрирован: Сб фев 17, 2007 10:01 pm
Сообщений: 102
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
http://pbasic.spb.ru/files/up/fasm.rar
Закачал.
Еще примеры :
http://pbasic.spb.ru/files/up/Examples.rar
И руководство на русском , хорошо подключать к самому фасму
или пурику и вызывать по F1.
http://pbasic.spb.ru/files/up/FASM%20Manual.rar


Последний раз редактировалось dosikus Ср окт 03, 2007 9:06 pm, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср окт 03, 2007 8:51 pm 
Не в сети
док

Зарегистрирован: Сб фев 17, 2007 10:01 pm
Сообщений: 102
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
to SofT MANiAC


А можно вопросы по фасму ?

1) в масм можно длину строки определить с помощью sizeof.
Как это сделать в фасме , может я не понял но
sizeof срабатывает только со структурами .
2) Можно ли свои процедуры вызывать invoke ?
Почему то в масм работает, в фасм говорит что размер операнда не определен.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 04, 2007 9:30 am 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
1. это не директива и даже не макрос, а константа, которая объявляется при определении структуры. Размер типов db, dq и проч. известен. sizeof нужен только для структур, что и реализовали.

2. вообщето можно. Может стоит указывать размер? типа DWORD и все такое.. И чем особо плох CALL ?

_________________
Люди!! Уважайте друг друга!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 11, 2007 7:47 pm 
Не в сети
док

Зарегистрирован: Сб фев 17, 2007 10:01 pm
Сообщений: 102
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пришлось самому ...
1) Вот макрос, замена sizeof

Код:
1
2
3
4
5
6
7
8
9
10
11
macro   string name, data
{
  local ..start
..start:
name db data,0
sizeof.#name =  $ - ..start
}
 
 
string  s1,'Hello fasm'
 



получим:
Код:
1
2
3
..start?00000001:
s1      db 'Hello fasm',0
sizeof.s1 = $ - ..start?00000001



2) Наверное все таки stdcall а не call , при call аргументы надо "вручную" в стек запихивать.


Код:
1
2
3
push arg1
   push arg2
call myfunction




Код:
1
stdcall myfunction, arg1,arg2



Имхо последнее предпочтительней.

И еще прилагаю руководство по препроцессору фасма и макросам
на русском.

http://pbasic.spb.ru/files/up/preproc.zip


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 11, 2007 7:53 pm 
Не в сети
док

Зарегистрирован: Сб фев 17, 2007 10:01 pm
Сообщений: 102
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
SofT MANiAC писал(а):

2. вообщето можно. Может стоит указывать размер? типа DWORD и все такое.. И чем особо плох CALL ?


Я так понял , что invoke работает только с импортом.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB