fasm virtual

Тема в разделе "WASM.BEGINNERS", создана пользователем dlz1000, 5 май 2008.

  1. dlz1000

    dlz1000 New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    16
    Нужно чтобы к элементам структуры обращатся через регистр. Делаю так:
    Код (Text):
    1. virtual at esi
    2. some_struct
    3. mov [esi.elem], 0
    4. end virtual
    fasm выдаёт ошибку.
     
  2. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    dlz1000
    Ты вставил команду в определение структуры - это неправильно.
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Можно писать наподобие

    mov [esi + some_struct.elm],0
     
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    неа. можно песать
    mov [some_struct.elm],0
    а оно уже скампилецо в mov [esi+offset_of_elm_in_some_struct]
     
  6. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    А если база не в esi? А если [ebx+eax+some_struct.elm]?
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    я исходил из этого
    типа того
    Код (Text):
    1. virtual at eax+ebx
    2. some_struct SOME_STRUCT
    3. end virtual
    4. mov [some_struct.elm],0
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Freeman
    Вопрос: а обязателен-ли виртуал? Може все-же лучше [eax+struc.elm]? Тем более, что такой код будет более переносим и понятен.
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Думал я глупость сморозил - fasm не знаю совсем.
    1) в первом посте команда использующая virtual вставлена в определение. Так можно делать ?
    2) посмотрел примеры. Использование виртуал позволяет при необходимости сменить
    регистр - это полезно. По поводу понятности - я бы поспорил.
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Насколько я знаю - нет.
    А в чем ваши возражения? Вариант [eax+struc.elm] будет звучать так-же и в масме и в васме итд. Видна база. Видна стуктура и элемент. Одно возражение только - писанины больше.
     
  11. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    нет, но довольно удобная и гибкая штука, как сказал valterg
    а можно вообще принееобходимости потом избавицо от регистра (например есле было решено использовать глобальные переменные в каком-либо случае). кстате, посмотрите маросы потипу proc, как там ловко организованы локальные переменные, именно через виртуал.
    или вы предпочитаете вместо удобного
    Код (Text):
    1. locals
    2. a dd ?
    3. b db ?
    4. c STRUCT1
    5. d dd ?
    6. endl
    7. mov [c.elm],0
    8. lea eax,[d]
    песать чтото типа
    Код (Text):
    1. push ebp
    2. mov ebp,esp
    3. sub esp,4+1+sizeof.STRUCT1+4
    4. mov [ebp-4-sizeof.STRUCT1+STRUCT1.elm],0
    5. lea eax,[ebp-4]
     
  12. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Нет я пользуюсь своим набором простых макросов. В них выделено, что переменная локальная и они ближе ко второму варианту. На мой взгляд так удобнее при отладке.