Bug in FASM

Тема в разделе "WASM.ASSEMBLER", создана пользователем Hunter, 8 авг 2005.

  1. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    Обнаружил ошибку в FASME при генерации кода в 32-х битном режиме для следующих пар инструкций:

    IRET / IRETD

    POPA / POPAD

    POPF / POPFD

    PUSHA / PUSHAD

    PUSHF / PUSHFD

    Проблема в том, что для 16-ти разрядных вариантов этих инструкций не генерируется префикс 66h. Причем, для 16-ти разрядного режима с использованием директивы use16 все генерируется правильно.
     
  2. Privalov

    Privalov New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2004
    Сообщения:
    16
    16-ти разрядные варианты это:

    IRETW

    POPAW

    POPF

    PUSHAW

    PUSHFW



    а IRET/POPA/POPF/PUSHA/PUSHF разрядные как режим.
     
  3. dr_dred

    dr_dred Сергей

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

    invoke ExitProcess,<stdcall WinMain,<invoke GetModuleHandle,0>,0,\

    <invoke GetCommandLine>,SW_SHOWDEFAULT>



    почему так нельзя, а так можно:



    include 'win32ax.inc'

    invoke ExitProcess,<stdcall WinMain,<stdcall [GetModuleHandle],0>,0,\

    <invoke GetCommandLine>,SW_SHOWDEFAULT>



    ну и всякое в этом роде.
     
  4. Privalov

    Privalov New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2004
    Сообщения:
    16
    Это была ошибка в макро. Я исправил, спасиба.
     
  5. GPcH

    GPcH Member

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

    А планируется ли 64 битная версия? В твоем интервью читал, что она уже есть, но на сайте не нашел
     
  6. Quantum

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

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

    Плохо читал :)
     
  7. S_T_A_S_

    S_T_A_S_ New Member

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

    GPcH Member

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

    S_T_A_S_

    Харе оффтопить народ :) Лучшеб сказали, где скачать можно поглядеть.



    PS: Я говорил не про то интервью что на wasm'е лежит, а про новое, что тут на форуме проскакивало
     
  9. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
  10. GPcH

    GPcH Member

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

    Извиняюсьб просто на сайте не нашел, что он 64 поддерживает - спасибо
     
  11. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Совсем народ сусбин не знает. Обидно =(



    http://sysbin.com/files/articles/fasm.html



    на форум то и кнам заходите board.sysbin.com =)



    Люди, а вот это чел с ником Привалов. Это такой прикол или как? =) Или сам Томаш заговорил по русски?! 8)
     
  12. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Он конешно сказал что говорит по русски но не очень. Поэтому все интервью бралось на англ.



    Так значит Привалов ты хорошо говоришь по русски?
     
  13. dr_dred

    dr_dred Сергей

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



    и так еще не компилирует:


    Код (Text):
    1. proc test_uses_directive uses ebx esi edi
    2.  
    3.         ret
    4.  
    5. endp




    но
    Код (Text):
    1. proc test_uses_directive uses ebx esi edi,anything_param
    2.  
    3.         ret
    4.  
    5. endp
     
  14. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    Хотел тоже спросить, но CW опередил :)
     
  15. Privalov

    Privalov New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2004
    Сообщения:
    16
    dr_dred: Исправил это тоже.



    CodeWorld: Я бы не сказал что хорошо говорю, но я слегка русский знаю.
     
  16. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Спешу задать вопрос к Privalov, по поводу FASM.

    Я некоторое время назад отлаживал свой код ОС и столкнулся с проблемой поиска хотябы начала процедуры, в которой имею #GP. Пришлось прибегать в к просмотру BIN файла, генерируемого FASM..., тупо высматривая и высчитывая OFFSET, чтобы хоть чуть определиться, в какой процедуре это произошло (CS:EIP).

    Будет ли в перспективе ключ и генерация файла типа .MAP при компиляции, позволяющий ориентироваться в таких случаях? Думаю это несложно, но полезно. Спасибо!
     
  17. Privalov

    Privalov New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2004
    Сообщения:
    16
    Пробовал ты display?


    Код (Text):
    1.  
    2. macro dispsym name
    3.  {
    4.     bits = 32
    5.     display 'The offset of ',`name,' is 0x'
    6.     repeat bits/4
    7.         d = '0' + name shr (bits-%*4) and 0Fh
    8.         if d > '9'
    9.             d = d + 'A'-'9'-1
    10.         end if
    11.         display d
    12.     end repeat
    13.     display 13,10
    14.  }
    15.  
    16.  
    17.  dispsym start
    18.  dispsym some_other_label
    19.  
    20.  start:
    21.         xor     eax,eax
    22.  some_other_label:
    23.  
     
  18. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Нет. Попробуем, освоим! Спасибо!!!
     
  19. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    Privalov

    еще хотел сказать пару слов о инструкциях типа IRET/IRETD. Да, действительно, приставка "W" работает, просто я, видимо, привык к мнемонике, используемой Intel в своих мануалах. Да и большинство отладчиков и дизассемблеров, что мне довелось увидеть используют именно такое обозначение. Может проще было бы оставить два варианта в стиле IRET/IRETD, а не три IRET/IRETW/IRETD? Или уже поздно?;) Может устроим голосование? Кто что думает?:)



    А сейчас о более серьезных вещах:

    для инструкций, где используется 16-ти битное смещение типа MOV EAX,dword [BX+0FFFFh], FASM генерирует код с 2-х байтным смещением, когда мог бы использовать один байт.

    Пример:

    MOV EAX,dword [BX+SI+0FFFFh] > 678B80FFFF

    когда можно было бы 678B40FF
     
  20. Privalov

    Privalov New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2004
    Сообщения:
    16
    Я выбирал IRET/IRETW/IRETD потому, что я думал, что в мануалах Intelа противоречивость - PUSH, POP и RET у Intelа разрядные как режим (в fasm есть PUSHW/POPW/RETW и PUSHD/POPD/RETD дла 16-ти и 32-ти битных вариантов), потому я сделал PUSHA, PUSHF, POPA, POPF и IRET аналогичными.



    А ошибка с MOV EAX,[BX+SI+0FFFFh] исправлена.