Определим, на каком месте находится буква «Ы» в слове «сегменты» от начала предложения включая пробелы. Считая от начала предложения -на 16.
Разобьем предложение ( символ «_» обозначает пробел).
Например:
0000: Изучаем_
0010: сегменты_
0020: памяти
0030:
В слове «Изучаем» символ «И» стоит на нулевом месте; символ «з» на первом месте; символ «у» на втором и т.д. , т.е. буква считается с нулевой позиции и используется два числа. И называются сегментом и смещением. Тогда символы имеют следующий адрес: 0000:0000; 0000:0001;0000:0002, т.е. сегмент 0000,смещение 0002.
В слове «сегменты» буквы считаются, начиная с десятого сегмента, но с нулевого смещения. Например, символ «н» имеет адрес: 0010:0005, где 0010-сегмент, 0005-смещение.
Слово «память» начинается с 0020 сегмента и с нулевого смещения.
Т.е. для того, чтобы найти адрес нужного символа, необходимо два числа: сам сегмент и смещение внутри этого сегмента. В ассемблере сегменты хранятся в сегментных регистрах: cs, ds,ss,es, а смещения могут хранится в других (но не во всех).
· Регистр cs служит для хранения сегмента кода программы(code segment- сегмент кода);
· Регистр ds- для хранения сегмента данных (data segment- сегмент данных);
· Регистр es-дополнительный сегментный регистр, который может хранить адрес любого сегмента (например, видеобуфера).
Например:
Загрузить в пару регистров es:di сегмент и смещение буквы «м» в слове «памяти».
…
mov ax,0020
mov es, ax
mov di, 2
…
В регистре es находится сегмент с номером 20, а в регистре di- смещение к букве «м» в слове «памяти».
Внимание!
Загрузка числа (номера любого сегмента) напрямую в сегментный регистр запрещена. Поэтому в строке mov ax,0020 сначала загружается номер сегмента в ax, а в строке mov es, ax загружается число 20 из регистра ax в es.