Ругань fasm'a

Тема в разделе "WASM.BEGINNERS", создана пользователем zukalo, 22 окт 2008.

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    push equ pushd
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    diamond, ты прав. Я ошибся, т.к. писал по памяти, не очень вдумываясь в написанное и забыв про еще один возможный вариант. Сейчас посмотрел свой макрос:
    Код (Text):
    1. macro stdcall proc, [arg]
    2. {
    3.   reverse pushd arg
    4.   common call proc
    5. }
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Кстати, никто не сталкивался с такой вещью. В версии 1.64 в 16-разрядном коде pushd CONST не приводил к генерации префикса размерности операнда, т.е. был эквивалентен pushw CONST (в 32-разрядном коде у pushw CONST также не было префикса). Помню долго искал ошибку в коде, пока не сообразил прогнать в отладчике и увидел, что код-то двухбайтовый, т.е. без префикса. Или это вообще нормально и так и должно быть?
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Помедитировав понял, что был не прав...
    действительно применительно к регистрам и памяти размерность push должна определяться размером операнда, иначе придётся брать старший word из соседней переменной или старшей части регистра, что в общем-то не совсем то что нужно... хотя если это ничему не мешает тогда явно переопределять тип push dword [myWord].
    Другое дело константы - они в 1.67.12 соответствуют размерности use32 и правильно реагируют на pushw, pushd,
    а для переменных и у pushd pushw всё равно размерность определяется операндом, а не окончанием d/w.
     
  5. neofit

    neofit Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    38
    Э-э-э. Я тока учусь, но:

    invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString ; -это под MASM
    ;5-ый урок Iczelion'а

    как реализовать это в fasm?
    invoke TextOut,hdc,TestString, ??? ;sizeof.TestString - ошибка
    В мануале к FASM'у про sizeof не упоминается, а в инклудах имеется только:

    INCLUDE/MACRO/STRUCT.INC

    macro struct name
    { virtual at 0
    name name
    sizeof.#name = $ - name
    name equ sizeof.#name
    end virtual }

    macro sizeof и т.п. отсутствуют
    Плиз хелп... (У меня FASM 1.47)
     
  6. zukalo

    zukalo New Member

    Публикаций:
    0
    Регистрация:
    22 окт 2008
    Сообщения:
    20
    Попробуйте обойтись вообще без макросов (лично я их не очень люблю).
    Например, сделайте так:
    Код (Text):
    1. invoke lstrlen, TestString
    2. inc eax
    3. invoke TextOut,hdc,TestString, eax
     
  7. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    neofit, например:

    TestString ..............
    sizeof_TestString = $-TestString
    ................

    invoke TextOut,hdc,TestString, sizeof_TestString
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    sizeof в данном случае не макрос. Просто так объявляется символ, который может использоваться для определения размера структуры. Например, объявляешь структуру mystruct, тогда sizeof.mystruct содержит размер структуры.
     
  9. neofit

    neofit Member

    Публикаций:
    0
    Регистрация:
    4 сен 2008
    Сообщения:
    38
    Спасибо - оба способа:
    1-ый--------------------------------------------------
    invoke lstrlen,TestString
    inc eax
    invoke TextOut,[hdc],0,0,TestSrting,eax
    и 2-ой------------------------------------------------
    sizeof_TestString = $-TestString
    ...
    invoke TextOut,[hdc],0,0,TestString,sizeof_TestString
    ---прекрасно работают и легки в понимании; с объявлением структуры тоже работает:
    struc db [data] ;здесь
    {
    common
    . db data
    .sizeof = $ - . -01h
    }
    ...
    TestString db 'some text',0 ;и здесь вместо db можно написать xx-например,
    ... ;чтоб для каждой db не обьявлялась .sizeof
    invoke TextOut,[hdc],0,0,TestString,TestString.sizeof
    Но если ".sizeof=$-.-01h" заменить на "sizeof.=$-.-01h", то выдает ошибку
    А что в FASM эквивалента MASM'овского "...,SIZEOF TestString" нету?
     
  10. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    TestString db "TestString",0
    SIZEOF.TestString=$-TestString
    ...
    invoke TextOut,hdc,0,0,TestString,SIZEOF.TestString