FASM's HLS

Тема в разделе "WASM.ASSEMBLER", создана пользователем dr_dred, 29 июл 2005.

  1. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    В FASM'е есть возможность использовать высокоуровневый синтаксис типа .if, .while, .until (ну, как в MASM'е), но это все рассчитано на одно сравнение, например: .if eax<>ebx. В MASM'е же можно делать несколько сравнений. Предлагаю попытать себя в реализации этого на FASM'е.


    Код (Text):
    1. macro .while [arg]
    2. {
    3.   common
    4.   local ..while
    5.   __WHILE equ ..while
    6.   local ..endw
    7.   __ENDW equ ..endw
    8.   __WHILE:
    9.   hehe __ENDW,arg ;;;;;вместо JCOND __ENDW,arg
    10. }
    11.  
    12. macro hehe label,[cond]
    13. {
    14.  common
    15.  match =COND a1&&a2,COND cond
    16.  \{
    17.    JCOND label,a1
    18.    JCOND label,a2
    19.  \}
    20.  match =COND a1||a2,COND cond
    21.  \{
    22.    local ..cond1
    23.    local ..cond2
    24.    JCOND ..cond2,a1
    25.    jmp ..cond1
    26.    ..cond2:
    27.    JCOND label,a2
    28.    ..cond1:
    29.  \}
    30.  restore COND
    31. }
    32.  
    33. macro JCOND label,[cond]
    34. {
    35.  common
    36.  match =COND v1>==v2, COND cond
    37.  \{
    38.    cmp v1,v2
    39.    jb label
    40.    COND equ
    41.  \}
    42.  match =COND v1<==v2, COND cond
    43.  \{
    44.    cmp v1,v2
    45.    ja label
    46.    COND equ
    47.  \}
    48.  match =COND v1==v2, COND cond
    49.  \{
    50.    cmp v1,v2
    51.    jne label
    52.    COND equ
    53.  \}
    54.  match =COND v1<>v2, COND cond
    55.  \{
    56.    cmp v1,v2
    57.    je label
    58.    COND equ
    59.  \}
    60.  match =COND v1>v2, COND cond
    61.  \{
    62.    cmp v1,v2
    63.    jbe label
    64.    COND equ
    65.  \}
    66.  match =COND v1<v2, COND cond
    67.  \{
    68.    cmp v1,v2
    69.    jae label
    70.    COND equ
    71.  \}
    72.  match =COND v1=,c=,v2, COND cond
    73.  \{
    74.    cmp v1,v2
    75.    jn\#c label
    76.    COND equ
    77.  \}
    78.  match =COND v, COND cond
    79.  \{
    80.    cmp v,0
    81.    je label
    82.    COND equ
    83.  \}
    84.  restore COND
    85. }




    Ну, вот, типа макрос хехе дорабатывать нужно (ТОЛЬКО 2 сравнения сейчас возможны).
     
  2. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    Ах, да. Это я писал про последнюю версию, которая сейчас еще в разработке, но доступна на сайте. Там еще помимо этго много добавилось.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Я как-то делал библу HLL макросов, ещё для старых версий где не было match (сейчас многие вещи намного проще). Долго думал, но решил не делать IF (сделал только самый примитивный вариант). Причина - сложно сгененрировать оптимальный код.



    Условные переходы - это традиционый конёк ассемблера, там где компилятор msvc поставит 2 Jcc, на чистом асме зачастую достаточно одного. А вот если использовать множественные вложенные .if как в masm - будут все пять :dntknw:(



    А вообще народ почему-то не сильно макросы любит. Как я понял, не доверяют им. Да я и сам чужими пользуюсь только если понимаю, что и почему они делают.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Не знаю это Privalov прикалывается что ли

    что НЕ РАВНО у него как в delphi, когда

    нормальные люди привыкли к !=
     
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Asterix

    Privalov не виноват, что Borland превратило нормальный язык программирования в "поднос" для Оракула.
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Privalov на pascal писал сначала, пока не заметил, что использует только встроенный ассемблер. и написал свой :)

    да и любой асм по синтаксису больше на паскаль похож, чем на си. только скобочек нет.



    ЗЫ: С-- поддерживает обе формы записи: <> и !=
     
  7. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    S_T_A_S_

    Да я макросами чужими тоже стараюсь не пользоваться. Наветное это потому, что не знаешь насколько там код оптимизирован.



    Ессно. Ведь в фасме это макросы, а в масме - нет. Сложно макросы оптимизировать.

    PS

    Если Вы знаток макросов, объясните мне макрос JCOND, что-то я не все понял.
     
  8. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    В масме тоже вроде никакой оптимизации не делается, в отличае от hll компиляторов.



    А что непонятно про JCOND ?

    match сравнивает первый аргумент макроса с "шаблоном" (типа v1>v2) если совпадает, то выполняется соотв. блок.
     
  9. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    S_T_A_S_

    А что значит то, что после запятой (COND cond)? Зачем COND equ?