Сложная переменная.

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

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Есть переменная:

    A1 dd 10

    Как после объявления превратить её в константу?
    Типа
    i equ A1

    Мне нужно реализовать следующую конструкцию:

    .data
    A1 dd 10
    A2 dd A1 dup (5)
    ..................

    Имхо без константы не обойтись. Или можно? Помогите плиз.
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Попробуй так.
    Код (Text):
    1. N equ 10
    2. A1 dd N
    3. A2 dd N dup (5)
     
  3. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Вторую Вашу строку вообще можно не писать - она лишняя.

    дело в том, что первая переменная заранее не известна.
    Вот в чём загвоздка.
    Иначе бы я и не заморачивался, а сразу объявил бы константу.
    Но нужно получить константу именно из переменной. :-(
    Что делать?
     
  4. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Попробовал так:
    .data
    A1 dd 10
    .code
    mov eax, A1
    .data
    A2 dd [eax dup (5)]

    Не прокатывает... :-(
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    переменная она на то и переменная, в константу ее никак не превратишь. Динамическое выделение памяти нужно раз на то дело пошло.
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    TOLSTOPUZ
    Попробуй так
    Код (Text):
    1. MAXSIZE equ 1000
    2. .data?
    3. A2 dd MAXSIZE dup (?)
    4. .code
    5. mov ecx,N; число меньше чем, MAXSIZE
    6. mov edi,offset A2
    7. mov eax,5
    8. rep stosd
     
  7. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    на fasm'е можно :lol:
    Код (Text):
    1. section '.const' data readable
    2. A1  dd  10
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    TOLSTOPUZ
    Конструкция
    A2 dd
    обрабатывается на этапе компиляции. Если содержимое A1 на этапе компиляции не определено, то никак нельзя - это нелогично. Напиши не ерунду про 10, а что тебе надо на самом деле, тогда и ответы будут нормальные.
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    .data
    A1 dd 10
    pA2 dd 0


    .code
    ...

    malloc([A1]) // выделяем из хипа
    mov [pA2],eax
    ...
    free([pA2]) // освобождаем буфер

    ...

    alloca([A1]) // выделяем из стека
    mov [pA2],eax
    ...
    // освобождается автоматически при выходе из функи
     
  10. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Почему на этапе компиляции?
    Разве нельзя:

    .code
    ................
    .data
    A1 dd 10
    A2 dd A1 dup (5)
    ..................
    .code
    .................

    Ладно, некритично.
    Уже решил.
    Буду просто использовать третью переменную, а потом в коде делать умножение переменной. Просто хотелось красиво.

    P.S.
    _Basmp_, спасибо за подсказку, но она слишком сложна для моего уровня... :-(
    Снимаю шляпу !
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    TOLSTOPUZ
    память по dd .. dup выделяется на этапе компиляции и вписывается в ехе. Менять ее количество в рантайме - невозможно. В соответствии с синтаксисом количество dup может быть только константой. те см #2
     
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    _basmp_
    но можно выделить по-максимуму как в #6, или в стеке, или в хипе как у вас
     
  13. _basmp_

    _basmp_ New Member

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