Что означает `Var2 DW Var1` в TurboShell / TurboAsm?

#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 будет соответствующим образом скорректировано.

Типичное использование этого — получить начало массивоподобных конструкций путем получения адреса (смещения в данном контексте) начала массива.