На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Модульное программирование в FAsm , Не хочут компилиться объектные файлы
    Начну с того, что я в ассемблере - новичок. А дело в следующем: я считаю, что программу, отличную по размеру от "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'е.
    Сообщение отредактировано: FalseMaster -
      Цитата
      отличную по размеру от "Hello World" целесообразно оформлять в несколько объектных файлов - работать с каждым в отдельности, а потом линковать.

      В фасеме нет, фасм пректрасно компилит готовые PE файлы.
      Цитата
      В формате PE GUI 4.0 вышеприведённое компилится на ура. Поясните, в чём дело, а если можно дайте ссылочку на пример двухмодульного проекта, написанного на FAsm'е.

      В документации есть описание ;) Насколько японю COFFфайлы требуют несколько другого описания
        Цитата ProgramMan @
        В фасеме нет, фасм пректрасно компилит готовые PE файлы.

        Не понял, почему нет. Компильнул FAsm'ом, собрал тем же GoLink'ом. Вся проблема в том, что FAsm не хочет компилить в формат COFF, а именно - ругается на "data import". Да, и ещё: FAsm прекрасно компилит готовые PE файлы, только если исходного кода с гулькин нос.
        Сообщение отредактировано: FalseMaster -
          Цитата
          целесообразно оформлять в несколько объектных файлов

          Не удачно написал. В фасме нет необходимости пользоваься внешним линкером т.к. и так можно получить PE минимального размера.
          Цитата
          Да, и ещё: FAsm прекрасно компилит готовые PE файлы, только если исходного кода с гулькин нос.

          Конечно на вкус и цвет.....но имхо, 10-15кб ассемблерного когда это не мало.

          http://board.flatassembler.net/topic.php?t=8162
            Цитата ProgramMan @
            10-15кб ассемблерного когда это не мало.

            10 - 15 kb исходного кода, да ещё на asm'е - какая же это программа. Исходник мало-мальски функционального приложения весит в где-то 100-200 кг.

            Короче, почитал я форум по приведённой ссылочке и понял, что на ассемблер переходить пока рановато, ибо нет нормального компилятора. Так что буду опять юзать Delphi - в нём по крайней мере нет никаких геморов с API, правда размер выходного файла побольше (3.5 vs 1), ну за всё, как говорится, приходится платить.

            P.S. В любом случае, спасибо за внимание.
            Сообщение отредактировано: FalseMaster -
              Цитата FalseMaster @
              10 - 15 kb исходного кода
              Скорее всего имелось в виду бинарного кода ;) Это довольно много, если брать в расчет только код. В этот размер вполне можно уместить неплохой текстовый редактор, с inspector и подсветкой синтаксиса :D
              FalseMaster, у тебя немного неверный взгляд на проблемы. Проблема не в самом асме, есть и нормальные компиляторы (на фасме свет клином не сошелся), есть и заголовочные файлы для апи. Тут скорее в другом сложность, в АПИ одних только констант, в заголовочных файлах, более 17000, не говоря уж о структурах и подпрограммах. С наскока, одним днем, все это не осилишь, все приходит отлько с опытом ;)
                Цитата AndNot @
                на фасме свет клином не сошелся

                А вот и нет - как раз и сошелся. Прежде чем попробовать кодить на асме, я перещупал много компиляторов, таких как: NAsm, TAsm, GoAsm, MAsm. У всех у них один боольшущий недостаток - они требуют LIB файлы. На мой взгляд - идиотизм полнейший - как будто из исходного кода не понятно, сколько параметров пушить. FAsm же, напротив, от этой дурной сишной наследственности автором избавлен - этим он мне и понравился. Говорят, проект развивается, так что, я думаю, следует повременить, пока он из зачаточного состояния преобразуется (может быть) в мощный компилер, типа Delphi.

                А насчёт API - не так уж много там функций и equates'ов, порядка 500 ± 100 в каждой из оновных либ. Я для делфей переписал несколько самых часто используемых, теперь любо-дорого посмотреть - всё ясно и понятно, с комментариями, не то что сишная галиматья.
                Сообщение отредактировано: FalseMaster -
                  Цитата FalseMaster @
                  У всех у них один боольшущий недостаток - они требуют LIB файлы
                  А ты не задумывался - зачем?
                  Цитата FalseMaster @
                  На мой взгляд - идиотизм полнейший - как будто из исходного кода не понятно, сколько параметров пушить
                  Во первых, либ-файлы здесь нипричем, они другую функцию выполняют. Во вторых, что тасм, что масм можно заставить отказаться от подсчета параметров, но можно и похитрее. Как по твоему объявляются такие функции как printf? Не ломай голову, я задаю обязательным первый параметр(строку), а остальные объявляю как VARARG, что в переводе на русский означает - любое количество. А в третьих, фасм выбирают новички, он им кажется превосходным и легким инструментом. Но человек развивается, начинает писать более сложные программы. И вот тут то и осознает, что фасм для этого плохо подходит, оказывается в "старичках" масме и тасме есть все, для создания сложных программ - удобная поддержка модульности (без этого нельзя, запутаешься в своих инклюдах), поддержка интерфейса с ЯВУ(не стоит игнорировать их либы, я вот юзаю либы png и jpg :) ), поддержка библиотек (вот и пригодились LIB, избавляя от ненужной перекомпиляции ;) ), контроль параметров (ха, когда дописываешь 30-ти тысячную строчку, то немудрено один параметр два раза напечатать ;) ), встроенные фичи ЯВУ(структуры, записи, нумерованные типы, объявления подпрограмм), в тасме очень удобная встроенная модель ООП (что ни говори, а с теми же списками удобнее работать, или сабклассировать что-либо - милое дело), оптимизация (а ты как думал? если я везде пишу LEA, то я знаю, что тасм заменит ее на OFFSET, если это возможно конечно :) ). Список далеко не полный :whistle: Да, много можно и в фасме макросами сделать. Но не все (попробуй сделать оптимизацию условных переходов), к тому же, с увеличением количества макросов, увеличивается и время компиляции.
                  Цитата FalseMaster @
                  пока он из зачаточного состояния
                  Он уже давно в этом состоянии :lol:
                  Цитата FalseMaster @
                  А насчёт API - не так уж много там функций и equates'ов, порядка 500 ± 100 в каждой из оновных либ
                  Это ты поторопился ;) Запускаю конвертер, первый попавшийся файл из инклюдов BCB 6.0:
                  ExpandedWrap disabled
                    file: commctrl.h
                    ------------------
                    convert:
                      messages  : 1844
                      structures: 160
                      functions : 73
                    error: 0
                    saved: commctrl.inc
                    done!

                  А это далеко не самый "тяжелый" файл ;)
                    Цитата 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 (не в счёт :) )
                    Сообщение отредактировано: FalseMaster -
                      Цитата FalseMaster @
                      По идее, назначение LIB файлов тоже что и заголовочников
                      Нет, неверно. В них хранятся объектные модули ,т.е. уже скомрилированные подпрограммы, а данных о типе их вызова нет. Именно поэтому, в программе, и объявляешь, какие из них ты будешь использовать, какой тип вызова (c, pascal, stdcall, etc.). Так что польза от них довольно ощутимая ;) А количество и тип параметров, при объявлении, можно и не задавать, это на твое усмотрение. Реальную пользу осознаешь когда у тебя станут накапливаться различные подпрограммы/функции/модули. Тогда просто компилируешь их и запихиваешь в один файл - lib, оставляя один инклюд, с описанием экспорта этого lib. Очень удобно.
                      Цитата FalseMaster @
                      Ну накой хрен инфа о параметрах и вызове суётся в имя импортируемой функции.
                      А ты сам подумай, чем отличаются подпрограммы использующие тип вызова Си и Паскаля. Тогда сразу станет ясно, почему компилятор обязан знать тип вызова ;) Ты же не думаешь всерьез, что в программе используется только один тип вызовов? Все зависит от набора используемых сторонних библиотек. И при существующем положении вещей становится возможным использовать CALL для вызова подпрограмм с любым типом передачи параметров, ассемблем сам позаботится о их правильной передаче, да об очистке стэка после вызова, если конечно требуется.
                      Цитата FalseMaster @
                      В TAsm'е отсутствует поддержка новых инструкций по причине того, что разработчики давно забили на него большущий болт.
                      И кто это сказал, что тасм не развивается? На сегодняшний день вполне нормально поддерживает MMX/SSE/SSE2/SSE3(PNI)/SSE4/3DNow!Pro инструкции. Последняя версия не далее как полгода назад вышла. Правда развивает его уже совсем не Борланд :D К тому же у него уже встроенная поддержка UNICODE, что избавляет от нехилых, по сложности, макросов. И скорость компиляции очень заметно выше оригинального тасма.
                      Цитата FalseMaster @
                      кол-во функций
                      Как считал? Что то у тебя многовато получилось. Но это только функции, да и то, есть еще несколько повседневных модулей. Прибавь сюда еще константы и структуры. И общий итог превысит 20000! Повеситься захочется :D
                        Цитата AndNot
                        И кто это сказал, что тасм не развивается?
                        Излазил весь инет - последняя версия = 5.0, дата exe'шников = 1996 г. Так что, если ты не шутишь конечно, дай пожалуйста ссылочку.
                        Цитата AndNot
                        И скорость компиляции очень заметно выше оригинального тасма
                        Хотелось бы узнать - насколько выше, чтобы зря не терять времени, ибо в оригинальном TAsm'е скорость компиляции никакая.
                        Цитата AndNot
                        Как считал? Что то у тебя многовато получилось
                        По F3 в Total Commander'е (естественно с прикрученным File Info)
                        Сообщение отредактировано: FalseMaster -
                          Цитата FalseMaster @
                          Излазил весь инет - последняя версия = 5.0
                          5.3.
                          А развивающийся "tasm" можешь здесь посмотреть: lzasm
                          Цитата FalseMaster @
                          насколько выше
                          На уровне масма.
                          Цитата FalseMaster @
                          По F3 в Total Commander'е
                          Так не посчитаешь. Тут поможет InpLib, или аналогичная утилита. В том же KERNEL около 950 функций, но это вместе с юникодом, в реальности же получается порядка 730 функций.
                            Цитата AndNot
                            А развивающийся "tasm" можешь здесь посмотреть
                            Спасибо за ссылку, хотя мог бы просто сказать, что это Lazy Assembler (так и знал, что развивающийся TAsm - это шутка)
                            Цитата AndNot
                            Так не посчитаешь
                            Да всё нормально посчитаешь. Ты прав - в Kenel32 версии 5.1.2600.3119 (XP) 950 функций, а те цифры, которые я привёл - это по совокупности, начиная с версии 4.00 (98)

                            P.S. В конце концов, давай уже закроем эту тему, а то что-то переливаем из пустого в порожнее - никакой полезной инфы для потенциальных читателей.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0410 ]   [ 15 queries used ]   [ Generated: 28.04.24, 00:34 GMT ]