ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »