Для указания сегмента данных используется регистр DS. То есть этот регистр должен указывать на начало данных в нашей программе или на сегмент DATASEG. Мы с Вами в шаге "Шаг 3 - Программа HelloWord" делали так:
mov ax,@data mov ds,ax
Во-первых, что такое @data - это идентификатор DATASEG при компиляции и сборки приложения на место этого слова будет поставлено реальное смещение сегмента, в котором находятся данные. Ведь до сборки программы мы этого не знаем. Так как при данному модели памяти данных хранятся в конце кода программы, то даже добавление одной команды к изменению его местоположения. И реально это число будет известно только при сборке.
А почему мы помещаем сначала в регистр AX? То же все просто есть правило - Вы не можете непосредственно изменять содержимое регистров CS,DS,SS. То есть мы не можем написать так:
mov ds,12345
Мы можем изменить этот регистр только используя другие регистры. Итак, смотри все вместе:
mov ax,@data ; в регистра AX смещение для данных mov ds,ax ; установить регистр DS равный AX то ест теперь там смещение.
Вот так. Я приведу окно из отладчика, о котором расскажу позже:
Вот смотрите, это наш код в командах процессора после выполнения команды mov ds,ax у нас регистр DS будет равен регистру AX и в данном случае от 1343.
Итак, у нас есть регистр DS, в который мы не можем непосредственно получить доступ, а только используя другие регистры. Этот регистр указывает на данные.