Блоки .IF в FASM

Discussion in 'WASM.ASSEMBLER' started by Vasil, May 7, 2006.

  1. Vasil

    Vasil Василь

    Blog Posts:
    0
    Joined:
    Jan 7, 2006
    Messages:
    228
    Location:
    Ижевск
    Честно говоря, не знал куда засунуть эту тему...



    Вот решил постепенно, точнее - постараться сразу, перейти от MASM к FASM. Подумал я, FASM - вещь. Но наткнулся на такую проблему, от которой я упал!!!



    1. В FASM нет обычной замены:

    ; .IF eax <> 0

    ; test eax, eax

    ; jz _ENDIF

    ; В MASM'e и то продумали дурацкий or eax, eax :)

    2. В масме я использовал верхний регистр, а не нижний:

    ; .IF .ELSEIF .ELSE .ENDIF .WHILE .REPEAT .........



    В итоге вот что получилось (см. аттач)...

    Буду очень признателен тем, кто найдёт какой-нить косяк :)

    Меня пока смущает 14 строчек нач. с 451-ой.



    ЗЫ: Если такая тема где-нить есть, то укажите плиз, сразу не увидишь :) А если эта тема устарела, то разумно будет, продолжить эту ;)



    [​IMG] _750674853__IF.rar
     
  2. Vasil

    Vasil Василь

    Blog Posts:
    0
    Joined:
    Jan 7, 2006
    Messages:
    228
    Location:
    Ижевск
    Шчьёрт побьери!!! Подстава...

    Совсем забыл, можно же так:

    ; .IF eax

    ;

    ; .ENDIF



    Простите, сразу не заметил :)
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Blog Posts:
    0
    Joined:
    Oct 28, 2003
    Messages:
    2,428
    Location:
    Russia
    Vasil

    В исходники глянь там один проектик на фасме вообще тебя либо в шок, либов в восхищение повергнет
     
  4. Vasil

    Vasil Василь

    Blog Posts:
    0
    Joined:
    Jan 7, 2006
    Messages:
    228
    Location:
    Ижевск
    FASM - оправдывает своё название "плоский", прям как в юморе: "Плоские шутки" :)
     
  5. leo

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    flat - "плоский" в смысле "прямой, ясный, определённый"

    PS: ИМХО - использование в ассемблере всякого рода .IF и иже с ним это нонсенс - жалкое и никчемное подобие HLL, прям AsmBasic какой-то :)))
     
  6. Vasil

    Vasil Василь

    Blog Posts:
    0
    Joined:
    Jan 7, 2006
    Messages:
    228
    Location:
    Ижевск
    leo

    Ты будешь прав, если создавать маленькие проектики.

    Если так рассуждать, то зачем нам директивы invoke или stdcall...



    Согласись, что каждый делает по-своему ;)
     
  7. leo

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    Не соглашусь, т.к. обычный invoke это простой и понятный макрос - известная последовательность команд push и call. А вот "необычный" масмовский invoke позволяет передавать в него непосредственно строку литералов типа "Hello, world!", что в результате превращается в какую-то отсебятину, поэтому я такой фигней никогда не пользуюсь

    А вот что дает .IF я вообще не понимаю
     
  8. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    Vasil



    IF/ENDIF в фасме имеют бало смысла, т.к. не позволяют писать

    так
    Code (Text):
    1. .if (al>="0" && al<="9") || (al>="A" && al<="F") || (al>="a" && al<="f") || al==VK_BACK


    или так
    Code (Text):
    1. .IF ($invoke(GetProcAddress, $invoke(GetModuleHandle, OFFSET szKernel32), $CTA0("D\*ebugActiveProcessStop")))
     
  9. Ms Rem

    Ms Rem New Member

    Blog Posts:
    0
    Joined:
    Apr 17, 2005
    Messages:
    1,057
    Location:
    С планеты "Земля"
    Впринципе, макросы полезны только тогда, когда ты полностью понимаешь какой они дают код. С invoke то тут все понятно, его можно юзать, А вот всякие .IF я бы юзать не стал, т.к. привык писать без них, и не понимаю что эти ифы генерят.
     
  10. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    leo





    ну обилие cmp eax,eax/je ... и test eax,eax/jz ... будут захламлять код


    Code (Text):
    1. .IF (BYTE PTR [esi]) == bl
    2.    .IF ($invoke(CheckSignature, $invoke(GetCurrentProcess), OFFSET szKernel32, OFFSET szIsDebuggerPresent, OFFSET IsDebuggerPresentSignature, 14))
    3.       inc BYTE PTR [edi]
    4.       inc ebp
    5.    .ELSE
    6.       invoke ErrorToLog, $CTA0(" \[Failed to apply protection against I\*sDebuggerPresent\]")
    7.    .ENDIF
    8. .ENDIF
     
  11. NullSessi0n

    NullSessi0n New Member

    Blog Posts:
    0
    Joined:
    Jan 20, 2006
    Messages:
    322
    Если я пишу программы, единственный макрос, который я позволяю - struct. На мой взгляд, invoke не ускоряет существенно процесс написания программа и не делает её удобочитаемой (я привык видеть так, как в отладчике). И пусть большой проект занимает 500 и более Кб, мне всё равно. Главное, что push и call намного понятнее и удобнее для меня. Тем более что я люблю обнулять eax и затем push eax.

    Asterix

    Фигня это, читается как программа на ЯВУ. Вы мне как в классическом OllyDbg и SoftIce подавайте, а не свои грёбаные макросы ставьте. Все эти .IF,.ELSE,.ENDIF - всё лишь от лени. А я её не считаю двигателем прогресса, мне вообще свойственно писать программы, которые какой-то группе людей (например, разработчикам защит ПО) усложнят жизнь. Пока что позволяю SoftIce иметь всех вподряд, так как user-mode отладчик мне не удобен (у него GUI и извратные, идущие от Microsoft способы).
     
  12. Nata

    Nata New Member

    Blog Posts:
    0
    Joined:
    Feb 23, 2006
    Messages:
    41
    В версии Fasm 1.65.19 можно допустим писать так:

    @:

    .if (al>="0" & al<="9") | (al>="A" & al<="F") | (al>="a" & al<="f")

    inc esi

    loop @

    .endif

    бла...бла..бла..
     
  13. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    Nata

    синтаксис | вместо || и & вместо && и <> вместо != роднит фасм с убогим VB или паскалем
     
  14. Nata

    Nata New Member

    Blog Posts:
    0
    Joined:
    Feb 23, 2006
    Messages:
    41
    И чем те синтаксис не нравится!Было || стало |.Смысл то не меняется!Так даже лучше!Впрочем на вкус и цвет.......Не хочеш писать на макросах то не пиши!
     
  15. dead_body

    dead_body wasm.ru

    Blog Posts:
    0
    Joined:
    Sep 3, 2004
    Messages:
    603
    Location:
    Украина;г.Харьков;г.Н.Каховка




    это пока так нельзя. фасм на месте не стоит. Щас выйдет версия под Мас, потом версия с debug output, при этом будут происходить задокументирование всех фич.

    Потом когда всё это будет закончено, в версии 1.68 будут нововедения наверное...

    Главное надееться и верить, что Томасу это всё не надоест :).
     
  16. mix_mix

    mix_mix Михаил

    Blog Posts:
    0
    Joined:
    Oct 8, 2005
    Messages:
    277
    Location:
    Токио
    Все говорят, что у fasm'a истинно правильный синтаксис, но, когда я увидел такую строку:

    invoke MessageBox,0,_message,_caption,0

    я был повергнут в ШОК. Какой-же это нах%р правильный синтаксис, когда в стек помещается не адрес строки, а сама строка (грубо говоря)!
     
  17. NullSessi0n

    NullSessi0n New Member

    Blog Posts:
    0
    Joined:
    Jan 20, 2006
    Messages:
    322
    Что тебе не нравится? Если пишется

    mov eax,<переменная>

    то кладётся адрес этой переменной, а

    если

    mov eax,[<переменная>]

    то кладётся значение по этому адресу. И всё удобно. И забудь ты ЯВУ, нах он нужен.
     
  18. Quantum

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

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    dead_body



    Где об этом можно почитать? Надо полагать, что эта версия не будет поддерживать PPC? Чем она тогда будет отличаться от линуксовой версии?



    Случайно обнаружил, что PureBasic использует фасм для компиляции кода :)
     
  19. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    mix_mix

    Это всего лишь макросы, использовать их тебя никто не заставляет. Это первое. Под правильным синтаксисом имелся ввиду синтаксис ассемблера. Это второе. И не ругайся - это третье.
     
  20. dinoweb

    dinoweb Дмитрий

    Blog Posts:
    0
    Joined:
    Oct 12, 2005
    Messages:
    129
    Location:
    Россия. Красноярск
    Программу, написанную с использованием .if(a >='0' || a<='9'), invoke(invoke(...),"xxx"), трудно назвать написанной на языке ассемблера. Даже не задумываясь об оптимизации, сам ты напишешь код куда лутьше, чем сделает это компилятор. Чем она лутьше программы, написанной на си, в смысле полного понимания её работы? В ней нет той гибкости, изящества и силы языка Ассемблера. Лично я предпочитаю знать: где, что и когда. А макросы использую только свои (для построения сложных структур данных), и простые стандартные.