Нужно чтобы к элементам структуры обращатся через регистр. Делаю так: Код (Text): virtual at esi some_struct mov [esi.elem], 0 end virtual fasm выдаёт ошибку.
неа. можно песать mov [some_struct.elm],0 а оно уже скампилецо в mov [esi+offset_of_elm_in_some_struct]
я исходил из этого типа того Код (Text): virtual at eax+ebx some_struct SOME_STRUCT end virtual mov [some_struct.elm],0
Freeman Вопрос: а обязателен-ли виртуал? Може все-же лучше [eax+struc.elm]? Тем более, что такой код будет более переносим и понятен.
Думал я глупость сморозил - fasm не знаю совсем. 1) в первом посте команда использующая virtual вставлена в определение. Так можно делать ? 2) посмотрел примеры. Использование виртуал позволяет при необходимости сменить регистр - это полезно. По поводу понятности - я бы поспорил.
Насколько я знаю - нет. А в чем ваши возражения? Вариант [eax+struc.elm] будет звучать так-же и в масме и в васме итд. Видна база. Видна стуктура и элемент. Одно возражение только - писанины больше.
нет, но довольно удобная и гибкая штука, как сказал valterg а можно вообще принееобходимости потом избавицо от регистра (например есле было решено использовать глобальные переменные в каком-либо случае). кстате, посмотрите маросы потипу proc, как там ловко организованы локальные переменные, именно через виртуал. или вы предпочитаете вместо удобного Код (Text): locals a dd ? b db ? c STRUCT1 d dd ? endl mov [c.elm],0 lea eax,[d] песать чтото типа Код (Text): push ebp mov ebp,esp sub esp,4+1+sizeof.STRUCT1+4 mov [ebp-4-sizeof.STRUCT1+STRUCT1.elm],0 lea eax,[ebp-4]
Нет я пользуюсь своим набором простых макросов. В них выделено, что переменная локальная и они ближе ко второму варианту. На мой взгляд так удобнее при отладке.