FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем gas, 25 апр 2010.

  1. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Пользуется ли кто макросами .DATA-.END (они вроде от самого автора FASM)? Они у меня прекрасно работают с FASM 1.57, но 1.65 - отказывается их понимать. Может в них можно чё подправить (скорее всего какие-то символы более новым фасмом не так понимаются)?

    А после удаления этих макросов и помещения всех определений данных в секцию данных, прога скомпилировалась но не заработала.
    Чем же таким существенным отличаются версии FASMов, что код несовместим? Где бы почитать? В whatsnew.txt от 1.65.8 ничего такого не увидел, но там описаны только изменения от 1.65.0
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    gas
    проблема не в фасме, а в твоем коде
    fasm\EXAMPLES\HELLO\hello.asm скомпили
     
  3. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    hello нормально компилится. И мои проги более сложные компилятся. Но одна моя самая сложная - глючит.
    Там около сотни инклудов раскиданы по десяткам папок.
    Хотя тут же, для проверки, компилю старым фасмом - всё работает.
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    попробуйте скомпилить кусками. хотябы с помощью коментов. найдите место с проблемой.
     
  5. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Проблему в коде я нашёл. В одном месте перед виндовой функцией вместо pushd было pushw. Старый фасм видать сёравно компилил push dword. Но это не решило проблему с макросами .DATA. А я без них никак... У меня вся прога пишется собственными макросами, многие из которых определяют данные примерно вот так:

    macro СООБЩИТЬ [строки]
    {common
    local адр
    .DATA ;------ в секции данных--------
    адр:
    forward
    db строки, 13,10
    common
    db 0
    .END ;------- конец данных в секции данных--------

    pusha
    pushd MB_OK
    pushd Заголовок_сообщения
    pushd адр
    pushd [hWnd]
    call [MessageBox]
    popa}

    А в коде пришу просто, к примеру
    СООБЩИТЬ 'Винда, сцука, не дала памяти' ,\
    'пойдём нах отсюдова...'
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Единственный плюс фасма это то, что может компилить бинари непосрественно. В общем эта среда не пригодна для написания серьёзных кодов, имхо :)
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clerk
    Э... Спокойно. :) А то, подозреваю, много народу мигом помидоры в Вашу сторону направят. :) И я буду первым. :)
    Если есть желание похоливарить, то предлагаю создать в хипе "MASM vs FASM", где можно будет цивилизованно забросать друг друга го... в общем, чем под руку попадётся. Может даже присоединюсь. :)
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    gas
    ну, каждый чел сам кузнец своих проблем. осталось только спросить - почему бы не перейти на ланг более высокого уровня при таких привычках? код будет лучше, тк ваши макросы его не оптимизируют никак. и ошибок меньше

    Clerk
    почему?
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    qqwe
    Потомучто:
    1. Не совместимо с масмом и мс компиляторами.
    2. Нет хидеров, хотя таких как Four-F. Все стандартные структуры и пр. необходимо описывать вручную.
    3. Базы нет. Много что написано на масме, на фасме я и не помню чтобы видел какието стоящие внимания коды.
    4. Синтаксис весьма не удобный, хотя это мб для меня так.
     
  10. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Хочу иметь вид приложения, отличный от виндовсового. Я сам рисую окошки, кнопки и т.п. У винды я беру только одно окно и экранный буфер.
    Может это можно сделать на C++, но я его органически не перевариваю. Считаю, язык может быть либо ассемблер, либо типа Бэйсик. Не хватает возможностей Бэйсика - значит буду делать ассемблером.
    И вообще, я хочу свой язык сделать. И это будет даже не язык. Что-то наподобие CAD электронных схем.
     
  11. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Clerk
    Я к масму даже не притрагивался. Он может то что мне надо - в любом месте кода определять данные в секции данных?
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gas
    pb попробуйте http://www.purebasic.com
    На крабе отломанный был в инструментах. Он непосредственно фасм воспринимает, имже и компилит. Может и в сурс на фасме транслировать скрипт. Довольно не плохой компилятор.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gas
    Для чего это нужно ?
    Там секция указывается непосредственно. Можно макро сделать, переопределяющее секцию.
     
  14. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    Clerk
    ? а что тут такого страшного?
    в свое время я перловал из С в фасм. нормально перловалось. в чем тогда проблема с масмом? кстати, в сорцах ваткома есть С перегонщик С-хидеров в васм-хидеры. вполне можно перенастоить и под масм и под фасм. синтаксис во всех случаях интел
    этого я не понял. некоторые жалуются на атт-интел. а тут что? в любом случае все легко соединяется через объектники
    эмм.. не знаю. макросами я почти не пользуюсь. с квадратными скобками фасм лучше. с авто оптимизацией переходов тоже. команды можно добавлять, выходные форматеры тоже
    отсутствие ассума - тоже правильно. чего там еще? встроить во что либо можно. изменить синтаксис. прикрутить свой препроцессор. много чего.
    имхо вполне нормальный ассемблер. из недостатков - немного замороченное объявление структур в базовом, без макросов, варианте.

    из недостатков масма - вы его можете любить. но если вам вдруг в нем чтото не понравится, то вам придется либо с этим мириться, либо обходить через задницу, либо не использовать масм.
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    gas
    ну прамо таки. если не асм, то только С++. и обязательно даже 2 + 2 на 10 раз перегруженых шаблонах. и васик как образец совершенства. лангов много. пошарьте, авось найдете откровение под себя.

    например, то, что предлагает клерк позволяет, помнится, писать вперемешку на асме и на том, что они васиком называют, хотя, помойму, ланг там ближе к пасу

    но есть и более интересные решения, хотя врядли они вас счас заинтересуют
     
  16. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Не очень понял... Могу-ли я в масме сделать так чтобы, например, в коде писать СООБЩИТЬ 'любой текст' ? И чтоб текст разместился в секции данных (чтоб в макросе его не перепрыгивать) . А имена русским языком писать можно?

    А ещё мне надо сделать макрос (в фасме я не смог) чтобы я мог писать так:
    ФЛАГИ Имя_ячейки_для_флагов ,\
    имя_флага_1 ,\
    имя_флага_2 ,\
    ...
    имя_флага_n

    После этого я должен иметь указанные имена которым присвоено [Имя_ячейки_для_флагов],номер_бита, и имена весов этих флагов (с какимнить префиксом).
    Щас, в фасме мне приходится городить:

    имя_флага1 equ [Флаги],0
    вес_имя_флага1 = 1
    ...
    имя_флага16 equ [Флаги],15
    вес_имя_флага16 = 32768
    ...
    имя_флага32 equ [Флаги],31
    вес_имя_флага16 = 2147483648

    Я хотел сделать так:
    macro ФЛАГИ ячейка,[имена]
    {
    common
    local n,m
    n=0
    m=1
    forward
    имя equ ячейка,n
    вес_#имена = m
    n = n+1
    m = m*2
    }
    Фасм почему-то не может, в блоке forward очередному имени присвоить [ячейка],номер_прохода. Всем перечисленным именам присваивается один и тот же номер бита равный числу переданных макросу имён (последнее значение n). Может кто знает как решить эту проблему?
     
  17. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Я там в последнем сообщении в двух я местах, в примерах макросов, ошибся. Почему на этом форуме нельзя редактировать собственные сообщения? Или я не знаю как?
     
  18. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Блин... ещё нагородил... И удалить своё нельзя?
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    gas
    Вам не положено :)
    Данные явно указываются в какой секции находятся. Например .data обьявит дальнейшие данные как расположенные в секции данных. Все данные должны быть указаны явно, масм это не скриптовый язык, там нет директив explicit, подобно как в вб.
    Зачем писать имена русским языком ?
    Да и вобще опишите задачу нормально. По мойму вы рано пытаетесь использовать асм, он для спецефических задач, не похож на ваш басик, собственно по аналогии которого вы и хотите приложение построить.
     
  20. gas

    gas New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2010
    Сообщения:
    52
    Это именно то что мне надо. Чё в фасме так не сделали... Правда придумали макросы .DATA и .END, но под последние версии фасма я не могу их найти. А с теми что есть не могу разобраться чё в них не соответствует...

    Мне так удобнее. Легче ориентироваться в собственном коде. Особенно по прошествии этак года.
    Асм для меня родной язык. Я электронщик, разрабатывал всякие штучки на микроконтроллерах. Правда давно этим не занимаюсь. Щас говорят и микроконтроллеры на Си программят.
    А задача - сделать себе удобную среду программирования. Всё что я видел - мне неудобно. Хотя бы тем что по-русски нельзя ничего писать кроме комментариев.