Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.172.252] |
|
Сообщ.
#1
,
|
|
|
Начну с того, что я в ассемблере - новичок. А дело в следующем: я считаю, что программу, отличную по размеру от "Hello World" целесообразно оформлять в несколько объектных файлов - работать с каждым в отдельности, а потом линковать. Только вот что-то не компилится ничерта. Вот текст:
; format PE GUI 4.0 format MS COFF ; entry Start include 'C:\Software\RADAsm 2\Include\Win32.inc' section '.flat' data writeable readable code executable Start: invoke MessageBox, 0,0,Caption,0 invoke ExitProcess, 0 Caption dd 'Hello, World !' data import library KERNEL,'Kernel32.dll',USER,'User32.dll' import KERNEL,\ ExitProcess,'ExitProcess' import USER,\ MessageBox,'MessageBoxA' end data В формате PE GUI 4.0 вышеприведённое компилится на ура. Поясните, в чём дело, а если можно дайте ссылочку на пример двухмодульного проекта, написанного на FAsm'е. |
Сообщ.
#2
,
|
|
|
Цитата отличную по размеру от "Hello World" целесообразно оформлять в несколько объектных файлов - работать с каждым в отдельности, а потом линковать. В фасеме нет, фасм пректрасно компилит готовые PE файлы. Цитата В формате PE GUI 4.0 вышеприведённое компилится на ура. Поясните, в чём дело, а если можно дайте ссылочку на пример двухмодульного проекта, написанного на FAsm'е. В документации есть описание Насколько японю COFFфайлы требуют несколько другого описания |
Сообщ.
#3
,
|
|
|
Цитата ProgramMan @ В фасеме нет, фасм пректрасно компилит готовые PE файлы. Не понял, почему нет. Компильнул FAsm'ом, собрал тем же GoLink'ом. Вся проблема в том, что FAsm не хочет компилить в формат COFF, а именно - ругается на "data import". Да, и ещё: FAsm прекрасно компилит готовые PE файлы, только если исходного кода с гулькин нос. |
Сообщ.
#4
,
|
|
|
Цитата целесообразно оформлять в несколько объектных файлов Не удачно написал. В фасме нет необходимости пользоваься внешним линкером т.к. и так можно получить PE минимального размера. Цитата Да, и ещё: FAsm прекрасно компилит готовые PE файлы, только если исходного кода с гулькин нос. Конечно на вкус и цвет.....но имхо, 10-15кб ассемблерного когда это не мало. http://board.flatassembler.net/topic.php?t=8162 |
Сообщ.
#5
,
|
|
|
Цитата ProgramMan @ 10-15кб ассемблерного когда это не мало. 10 - 15 kb исходного кода, да ещё на asm'е - какая же это программа. Исходник мало-мальски функционального приложения весит в где-то 100-200 кг. Короче, почитал я форум по приведённой ссылочке и понял, что на ассемблер переходить пока рановато, ибо нет нормального компилятора. Так что буду опять юзать Delphi - в нём по крайней мере нет никаких геморов с API, правда размер выходного файла побольше (3.5 vs 1), ну за всё, как говорится, приходится платить. P.S. В любом случае, спасибо за внимание. |
Сообщ.
#6
,
|
|
|
Цитата FalseMaster @ Скорее всего имелось в виду бинарного кода Это довольно много, если брать в расчет только код. В этот размер вполне можно уместить неплохой текстовый редактор, с inspector и подсветкой синтаксиса 10 - 15 kb исходного кода FalseMaster, у тебя немного неверный взгляд на проблемы. Проблема не в самом асме, есть и нормальные компиляторы (на фасме свет клином не сошелся), есть и заголовочные файлы для апи. Тут скорее в другом сложность, в АПИ одних только констант, в заголовочных файлах, более 17000, не говоря уж о структурах и подпрограммах. С наскока, одним днем, все это не осилишь, все приходит отлько с опытом |
Сообщ.
#7
,
|
|
|
Цитата AndNot @ на фасме свет клином не сошелся А вот и нет - как раз и сошелся. Прежде чем попробовать кодить на асме, я перещупал много компиляторов, таких как: NAsm, TAsm, GoAsm, MAsm. У всех у них один боольшущий недостаток - они требуют LIB файлы. На мой взгляд - идиотизм полнейший - как будто из исходного кода не понятно, сколько параметров пушить. FAsm же, напротив, от этой дурной сишной наследственности автором избавлен - этим он мне и понравился. Говорят, проект развивается, так что, я думаю, следует повременить, пока он из зачаточного состояния преобразуется (может быть) в мощный компилер, типа Delphi. А насчёт API - не так уж много там функций и equates'ов, порядка 500 ± 100 в каждой из оновных либ. Я для делфей переписал несколько самых часто используемых, теперь любо-дорого посмотреть - всё ясно и понятно, с комментариями, не то что сишная галиматья. |
Сообщ.
#8
,
|
|
|
Цитата FalseMaster @ А ты не задумывался - зачем? У всех у них один боольшущий недостаток - они требуют LIB файлы Цитата FalseMaster @ Во первых, либ-файлы здесь нипричем, они другую функцию выполняют. Во вторых, что тасм, что масм можно заставить отказаться от подсчета параметров, но можно и похитрее. Как по твоему объявляются такие функции как printf? Не ломай голову, я задаю обязательным первый параметр(строку), а остальные объявляю как VARARG, что в переводе на русский означает - любое количество. А в третьих, фасм выбирают новички, он им кажется превосходным и легким инструментом. Но человек развивается, начинает писать более сложные программы. И вот тут то и осознает, что фасм для этого плохо подходит, оказывается в "старичках" масме и тасме есть все, для создания сложных программ - удобная поддержка модульности (без этого нельзя, запутаешься в своих инклюдах), поддержка интерфейса с ЯВУ(не стоит игнорировать их либы, я вот юзаю либы png и jpg ), поддержка библиотек (вот и пригодились LIB, избавляя от ненужной перекомпиляции ), контроль параметров (ха, когда дописываешь 30-ти тысячную строчку, то немудрено один параметр два раза напечатать ), встроенные фичи ЯВУ(структуры, записи, нумерованные типы, объявления подпрограмм), в тасме очень удобная встроенная модель ООП (что ни говори, а с теми же списками удобнее работать, или сабклассировать что-либо - милое дело), оптимизация (а ты как думал? если я везде пишу LEA, то я знаю, что тасм заменит ее на OFFSET, если это возможно конечно ). Список далеко не полный Да, много можно и в фасме макросами сделать. Но не все (попробуй сделать оптимизацию условных переходов), к тому же, с увеличением количества макросов, увеличивается и время компиляции.На мой взгляд - идиотизм полнейший - как будто из исходного кода не понятно, сколько параметров пушить Цитата FalseMaster @ Он уже давно в этом состоянии пока он из зачаточного состояния Цитата FalseMaster @ Это ты поторопился Запускаю конвертер, первый попавшийся файл из инклюдов BCB 6.0:А насчёт API - не так уж много там функций и equates'ов, порядка 500 ± 100 в каждой из оновных либ file: commctrl.h ------------------ convert: messages : 1844 structures: 160 functions : 73 error: 0 saved: commctrl.inc done! А это далеко не самый "тяжелый" файл |
Сообщ.
#9
,
|
|
|
Цитата AndNot Задумывался и пришёл к выводу, что незачем. По идее, назначение LIB файлов тоже что и заголовочников, что я делал для Delphi, да только организовано всё это дело через одно место. Ну накой хрен инфа о параметрах и вызове суётся в имя импортируемой функции. По этой причине, чтобы вызвать функцию, нужно ещё вставить в секцию импорта её оригинальное и "неоригинальное" имя, при этом смысл использования LIB файла теряется.А ты не задумывался - зачем? Цитата AndNot Вообще-то в первом посте я написал "новичок", а не "идиот"Как по твоему объявляются такие функции как printf? Цитата AndNot В TAsm'е отсутствует поддержка новых инструкций по причине того, что разработчики давно забили на него большущий болт.оказывается в "старичках" масме и тасме есть все Цитата AndNot кол-во функций:Это ты поторопился GDI32.dll - 615 User32.dll - 755 OpenGL.32.dll - 369 Shell32.dll - 312 Kernel32.dll - 1056 (перебор ) ComCtl32.dll - 109 (плюс структуры etc ) ComDlg32.dll - 26 (не в счёт ) |
Сообщ.
#10
,
|
|
|
Цитата FalseMaster @ Нет, неверно. В них хранятся объектные модули ,т.е. уже скомрилированные подпрограммы, а данных о типе их вызова нет. Именно поэтому, в программе, и объявляешь, какие из них ты будешь использовать, какой тип вызова (c, pascal, stdcall, etc.). Так что польза от них довольно ощутимая А количество и тип параметров, при объявлении, можно и не задавать, это на твое усмотрение. Реальную пользу осознаешь когда у тебя станут накапливаться различные подпрограммы/функции/модули. Тогда просто компилируешь их и запихиваешь в один файл - lib, оставляя один инклюд, с описанием экспорта этого lib. Очень удобно.По идее, назначение LIB файлов тоже что и заголовочников Цитата FalseMaster @ А ты сам подумай, чем отличаются подпрограммы использующие тип вызова Си и Паскаля. Тогда сразу станет ясно, почему компилятор обязан знать тип вызова Ты же не думаешь всерьез, что в программе используется только один тип вызовов? Все зависит от набора используемых сторонних библиотек. И при существующем положении вещей становится возможным использовать CALL для вызова подпрограмм с любым типом передачи параметров, ассемблем сам позаботится о их правильной передаче, да об очистке стэка после вызова, если конечно требуется.Ну накой хрен инфа о параметрах и вызове суётся в имя импортируемой функции. Цитата FalseMaster @ И кто это сказал, что тасм не развивается? На сегодняшний день вполне нормально поддерживает MMX/SSE/SSE2/SSE3(PNI)/SSE4/3DNow!Pro инструкции. Последняя версия не далее как полгода назад вышла. Правда развивает его уже совсем не Борланд К тому же у него уже встроенная поддержка UNICODE, что избавляет от нехилых, по сложности, макросов. И скорость компиляции очень заметно выше оригинального тасма.В TAsm'е отсутствует поддержка новых инструкций по причине того, что разработчики давно забили на него большущий болт. Цитата FalseMaster @ Как считал? Что то у тебя многовато получилось. Но это только функции, да и то, есть еще несколько повседневных модулей. Прибавь сюда еще константы и структуры. И общий итог превысит 20000! Повеситься захочется кол-во функций |
Сообщ.
#11
,
|
|
|
Цитата AndNot Излазил весь инет - последняя версия = 5.0, дата exe'шников = 1996 г. Так что, если ты не шутишь конечно, дай пожалуйста ссылочку.И кто это сказал, что тасм не развивается? Цитата AndNot Хотелось бы узнать - насколько выше, чтобы зря не терять времени, ибо в оригинальном TAsm'е скорость компиляции никакая.И скорость компиляции очень заметно выше оригинального тасма Цитата AndNot По F3 в Total Commander'е (естественно с прикрученным File Info) Как считал? Что то у тебя многовато получилось |
Сообщ.
#12
,
|
|
|
Цитата FalseMaster @ 5.3.Излазил весь инет - последняя версия = 5.0 А развивающийся "tasm" можешь здесь посмотреть: lzasm Цитата FalseMaster @ На уровне масма. насколько выше Цитата FalseMaster @ Так не посчитаешь. Тут поможет InpLib, или аналогичная утилита. В том же KERNEL около 950 функций, но это вместе с юникодом, в реальности же получается порядка 730 функций. По F3 в Total Commander'е |
Сообщ.
#13
,
|
|
|
Цитата AndNot Спасибо за ссылку, хотя мог бы просто сказать, что это Lazy Assembler (так и знал, что развивающийся TAsm - это шутка)А развивающийся "tasm" можешь здесь посмотреть Цитата AndNot Да всё нормально посчитаешь. Ты прав - в Kenel32 версии 5.1.2600.3119 (XP) 950 функций, а те цифры, которые я привёл - это по совокупности, начиная с версии 4.00 (98)Так не посчитаешь P.S. В конце концов, давай уже закроем эту тему, а то что-то переливаем из пустого в порожнее - никакой полезной инфы для потенциальных читателей. |