#assembly #x86-16 #tasm #data-segment
#сборка #x86-16 #tasm #сегмент данных
Вопрос:
почему следующий код компилируется идеально?
Data Segment
Var1 Dw (any 4 digit hex value)
Var2 Dw Var1
Data Ends
что вообще означает строка «Var2 Dw Var1»?
Я думал, что только непосредственное значение может идти после определения типа.
Комментарии:
1. Какой ассемблер вы используете?
2. TurboShell , похожий на TurboAsm
3. Если моя память мне не изменяет (а может и нет), он объявит
Var2
, что удерживает смещение того, гдеVar1
находится внутри сегментаVar1
. В конкретном примере вопроса значениеVar2
будет равно 0, посколькуVar1
это первое объявление внутри сегмента.4. @LasseV.Karlsen о, спасибо!!!!
5. Вы проверяли это, объявляя больше переменных раньше
Var1
и проверяяVar2
, изменилось ли значение, как я сказал?
Ответ №1:
Когда вы объявляете переменную, подобную этой:
VARX DW VARY
тогда вы в основном говорите:
VAR DW (offset of VARY into the segment VARY is in)
В вашем конкретном примере Var1
это первая переменная в сегменте данных, поэтому объявление Var2
эквивалентно:
Var2 DW 0x0000
Если позже вы добавите больше переменных, прежде Var1
чем, по сути, продвинетесь Var1
дальше в сегмент, значение Var2
будет соответствующим образом скорректировано.
Типичное использование этого — получить начало массивоподобных конструкций путем получения адреса (смещения в данном контексте) начала массива.