Помогите с изучением fasm

Тема в разделе "WASM.WIN32", создана пользователем Rohan, 20 ноя 2004.

  1. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    S_T_A_S_



    Я давно заметил такую тенденцию, в исходниках FASM'a тоже такое было. Это, конечно, хорошо, но MASM32 тоже добавляется в %INCLUDE%, а их включаемые файлы несовместимы.



    Хотя Никто не запрещает писатьтак:
    Код (Text):
    1.  
    2. include 'Win32a.inc'
    3. ...
    4. include 'APIa\kernel32.inc'




    Но тогда вообще нет разницы, какая переменная путей окружения используется.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Есть вопросы по фасому.

    Почему в теле макроса идентификаторы записывают с приставкой знака "_"

    Что означают символы "." и ".." в начале идентификаторов.

    Идентификаторы- имена меток,констант, переменных,макросов и тд..
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Pavia

    Эти вопросы уже задавались на форуме, и мной в том числе, были ответы, так что юзай поиск, должен найти..
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Asterix

    Спарсибо разобрался.



    Вопрос как проверить существует ли глобальная метка с данным именим или нет?
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > Вопрос как проверить существует ли глобальная метка с данным именим или нет?



    fasm предупредит при компиляции.
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    if defined some_label
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    S_T_A_S_

    Спасибо.Правдо в моем случаи это не проходит. Фасм выдоет, что код не может быть сгенерирован.
     
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Решил проблему так.

    macro label name

    {



    name#.defined equ 0

    }

    macro setlabel name

    {

    if name#.defined eq 0

    name#:

    name#.defined equ 1

    end if

    }
     
  10. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Pavia >




    Знакомая ошибочка :derisive:

    Вместо "if defined" можно попробовать такой макрос:


    Код (Text):
    1. macro   ifne    arg
    2. {
    3.     local   ..here
    4.     if defined ..here | ~ defined arg
    5.         ..here:
    6. }




    Использовать так:
    Код (Text):
    1.  
    2. ifne foo
    3.  
    4. foo = 2 ; угадал ? ;-)
    5.  
    6. end if




    Вместо EQU для присваивания чисел лучше использовать '='

    EQU - директива препроцессора, выполняется ДО директив ассемблера (if), так что макрос setlabel не рабочий.
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    S_T_A_S_

    Красиво!

    Эх, я столько раз пытался решить эту проблему…
     
  12. Rohan

    Rohan New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2004
    Сообщения:
    133
    Привет S_T_A_S_

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

    "Другие обычные значения – это 10 и 13. 10 перемещает курсор в первую позицию текущей строки. 13 перемещает курсор на строку вниз (при достижении нижней границы экрана, он скроллируется вверх)."

    10 - переход на новую строку, а вот 13 в начало строки.

    Кстати меня туториал очень порадовал!

    Если я не прав то поправь меня.
     
  13. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    S_T_A_S_

    Извини, но похоже ты не понял меня. Те два макроса: label и setlabel они работают и они являются решением данной проблемы, это почти тоже самое, что ты написал в следующем посте. Но у тебя более оригинально. Почему использую equ , а не "=". Потому что с равно не вышло, а вот equ работает с ifом .
     
  14. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Rohan



    Спасибо, ты прав 10 - "перевод строки", а 13 - "возврат каретки".





    Pavia



    Да, что-то я не разглядел твой макрос сходу :-(

    Меня смутило, что EQU внутри IF. Можно его вынести, всё равно смысл не изменит.
    Код (Text):
    1. macro setlabel name
    2. {
    3.   if name#.defined eq 0
    4.      name:
    5.   end if
    6.   name#.defined equ 1
    7. }




    C "=" не выходило, т.к. проверка условия осуществлялась посредством "eq", а нужно было использовать



    if name#.defined = 0



    или просто



    if ~ name#.defined





    ЗЫ: макрос, который я приводил не мой, но он давно лежит на Θоруме (в составе моей библиотеки макросов)
     
  15. Rohan

    Rohan New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2004
    Сообщения:
    133
    Блин по твоей доке понял гораздо больше чем по учебнику Зубкова. После него в голове оставалать одна каша.
     
  16. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Я по учебнику Зубкова вообще ничего не понял :).
     
  17. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    james_bond



    дундук, ой, будешь матюгаться на форуме - забаню.
     
  18. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Гы, зачем всё так сложно:


    Код (Text):
    1. include 'ext.fi'
    2.  
    3. !GUI
    4.  
    5. ExitProcess                         \  
    6.     <MessageBox                         \
    7.         GetForegroundWindow,                \
    8.         @T 'hello!', \
    9.         @T 'Hello program',         \
    10.         MB_OK>
    11.  
    12. !END