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

Discussion in 'WASM.BEGINNERS' started by TOLSTOPUZ, Oct 28, 2008.

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Blog Posts:
    0
    Joined:
    Apr 26, 2008
    Messages:
    509
    Есть переменная:

    A1 dd 10

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

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

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

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

    reverser New Member

    Blog Posts:
    0
    Joined:
    Jan 27, 2004
    Messages:
    615
    Попробуй так.
    Code (Text):
    1. N equ 10
    2. A1 dd N
    3. A2 dd N dup (5)
     
  3. TOLSTOPUZ

    TOLSTOPUZ New Member

    Blog Posts:
    0
    Joined:
    Apr 26, 2008
    Messages:
    509
    Вторую Вашу строку вообще можно не писать - она лишняя.

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

    TOLSTOPUZ New Member

    Blog Posts:
    0
    Joined:
    Apr 26, 2008
    Messages:
    509
    Попробовал так:
    .data
    A1 dd 10
    .code
    mov eax, A1
    .data
    A2 dd [eax dup (5)]

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

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    переменная она на то и переменная, в константу ее никак не превратишь. Динамическое выделение памяти нужно раз на то дело пошло.
     
  6. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Joined:
    Jun 25, 2008
    Messages:
    3,914
    TOLSTOPUZ
    Попробуй так
    Code (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

    Blog Posts:
    0
    Joined:
    Feb 15, 2007
    Messages:
    1,921
    на fasm'е можно :lol:
    Code (Text):
    1. section '.const' data readable
    2. A1  dd  10
     
  8. valterg

    valterg Active Member

    Blog Posts:
    0
    Joined:
    Aug 19, 2004
    Messages:
    2,105
    TOLSTOPUZ
    Конструкция
    A2 dd
    обрабатывается на этапе компиляции. Если содержимое A1 на этапе компиляции не определено, то никак нельзя - это нелогично. Напиши не ерунду про 10, а что тебе надо на самом деле, тогда и ответы будут нормальные.
     
  9. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Apr 26, 2008
    Messages:
    509
    Почему на этапе компиляции?
    Разве нельзя:

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

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

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

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    TOLSTOPUZ
    память по dd .. dup выделяется на этапе компиляции и вписывается в ехе. Менять ее количество в рантайме - невозможно. В соответствии с синтаксисом количество dup может быть только константой. те см #2
     
  12. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Joined:
    Jun 25, 2008
    Messages:
    3,914
    _basmp_
    но можно выделить по-максимуму как в #6, или в стеке, или в хипе как у вас
     
  13. _basmp_

    _basmp_ New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2005
    Messages:
    2,939
    Mikl___
    тут все от задачи зависит. а задачи не представлено. вот и гадать приходится.