Есть переменная: A1 dd 10 Как после объявления превратить её в константу? Типа i equ A1 Мне нужно реализовать следующую конструкцию: .data A1 dd 10 A2 dd A1 dup (5) .................. Имхо без константы не обойтись. Или можно? Помогите плиз.
Вторую Вашу строку вообще можно не писать - она лишняя. дело в том, что первая переменная заранее не известна. Вот в чём загвоздка. Иначе бы я и не заморачивался, а сразу объявил бы константу. Но нужно получить константу именно из переменной. :-( Что делать?
переменная она на то и переменная, в константу ее никак не превратишь. Динамическое выделение памяти нужно раз на то дело пошло.
TOLSTOPUZ Попробуй так Код (Text): MAXSIZE equ 1000 .data? A2 dd MAXSIZE dup (?) .code mov ecx,N; число меньше чем, MAXSIZE mov edi,offset A2 mov eax,5 rep stosd
TOLSTOPUZ Конструкция A2 dd обрабатывается на этапе компиляции. Если содержимое A1 на этапе компиляции не определено, то никак нельзя - это нелогично. Напиши не ерунду про 10, а что тебе надо на самом деле, тогда и ответы будут нормальные.
.data A1 dd 10 pA2 dd 0 .code ... malloc([A1]) // выделяем из хипа mov [pA2],eax ... free([pA2]) // освобождаем буфер ... alloca([A1]) // выделяем из стека mov [pA2],eax ... // освобождается автоматически при выходе из функи
Почему на этапе компиляции? Разве нельзя: .code ................ .data A1 dd 10 A2 dd A1 dup (5) .................. .code ................. Ладно, некритично. Уже решил. Буду просто использовать третью переменную, а потом в коде делать умножение переменной. Просто хотелось красиво. P.S. _Basmp_, спасибо за подсказку, но она слишком сложна для моего уровня... :-( Снимаю шляпу !
TOLSTOPUZ память по dd .. dup выделяется на этапе компиляции и вписывается в ехе. Менять ее количество в рантайме - невозможно. В соответствии с синтаксисом количество dup может быть только константой. те см #2