Архитектура микропроцессоров и их программирование. Карягин А.П. - 14 стр.

UptoLike

Составители: 

14
Сегменты и смещения комбинируются следующим образом: значение
сегмента сдвигается влево на 4 разряда (то есть умножается на 16), а затем
складывается со смещением, как показано на рисунке 1.5.
Рассмотрим, например, следующий фрагмент программы:
:
mov ax,1000h
mov ds,ax
mov si,201h
mov dl,[si]
:
Здесь для сегментного регистра DS устанавливается значение 1000h, SI
устанавливается в значение 201h. Мы можем представить их в виде "сегмент:
смещение" - 1000:201h. Адрес, из которого загружаются данные в DL, пред-
ставляет собой:
((DS * 16) + SI) или ((1000h * 16) + 201h)
Итак, программа получает доступ к полному адресному пространству
в 1 мегабайт с помощью использования только пары "сегмент: смещение". Все
инструкции и режимы адресации процессора 8086 по умолчанию работают от-
носительно того или иного сегментного регистра, хотя в некоторых инструкци-
ях можно явно указать, что нужно использовать желаемый сегментный ре-
гистр. Обычно редко требуется загружать значение непосредственно в сегмент-
ный регистр, а вместо этого сегментные регистры в программе имеют символи-
ческие имена сегментов, которые в ходе ассемблирования, компоновки и вы-
полнения превращаются в числа. Это необходимо, поскольку нет способа ска-
зать заранее, где в памяти будет находиться данный сегмент: это зависит от
версии DOS, числа и размера резидентных в памяти программ, а также потреб-
ности в памяти остальной части программы. Использование имен сегментов по-
зволяет Турбо Ассемблеру и операционной системе DOS выполнять подобные
вычисления.
Наиболее общим именем сегмента для размещения данных является
@Datа, которое в упрощенных директивах определения сегментов используется
для ссылки на используемый по умолчанию сегмент данных. Например:
dosseg
.model small
.data
var1 dw 0
:
.code
mov ax,@data
mov ds,ax
:
end
Здесь регистр DS загружается таким образом, что он будет указывать
на используемый по умолчанию сегмент данных, в котором находится Var1.
         Сегменты и смещения комбинируются следующим образом: значение
сегмента сдвигается влево на 4 разряда (то есть умножается на 16), а затем
складывается со смещением, как показано на рисунке 1.5.
         Рассмотрим, например, следующий фрагмент программы:
           :
           mov ax,1000h
           mov ds,ax
           mov si,201h
           mov dl,[si]
           :
        Здесь для сегментного регистра DS устанавливается значение 1000h, SI
устанавливается в значение 201h. Мы можем представить их в виде "сегмент:
смещение" - 1000:201h. Адрес, из которого загружаются данные в DL, пред-
ставляет собой:
   ((DS * 16) + SI) или ((1000h * 16) + 201h)
         Итак, программа получает доступ к полному адресному пространству
в 1 мегабайт с помощью использования только пары "сегмент: смещение". Все
инструкции и режимы адресации процессора 8086 по умолчанию работают от-
носительно того или иного сегментного регистра, хотя в некоторых инструкци-
ях можно явно указать, что нужно использовать желаемый сегментный ре-
гистр. Обычно редко требуется загружать значение непосредственно в сегмент-
ный регистр, а вместо этого сегментные регистры в программе имеют символи-
ческие имена сегментов, которые в ходе ассемблирования, компоновки и вы-
полнения превращаются в числа. Это необходимо, поскольку нет способа ска-
зать заранее, где в памяти будет находиться данный сегмент: это зависит от
версии DOS, числа и размера резидентных в памяти программ, а также потреб-
ности в памяти остальной части программы. Использование имен сегментов по-
зволяет Турбо Ассемблеру и операционной системе DOS выполнять подобные
вычисления.
         Наиболее общим именем сегмента для размещения данных является
@Datа, которое в упрощенных директивах определения сегментов используется
для ссылки на используемый по умолчанию сегмент данных. Например:
       dosseg
      .model small
      .data
var1 dw 0
      :
      .code
      mov ax,@data
      mov ds,ax
      :
      end
         Здесь регистр DS загружается таким образом, что он будет указывать
на используемый по умолчанию сегмент данных, в котором находится Var1.

14