Программирование на Ассемблере


         

3.4.3 Внешнее представление адресов.


Ниже рассмотрено внешнее представление адреса для защищенного режима. Особенности задания адресов в реальном режиме можно изучить по [1].

Используются следующие способы задания адреса: относительная адресация, базисная адресация, индексная адресация, базисно - индексная адресация, относительная базисно - индексная адресация[5].

Относительная адресация. Адрес задается переменной или записью вида: Переменная ±Смещение. Определяет адрес с помощью смещения заданной переменной относительно начала сегмента, внутри которого она определена. Смещение должно быть задано как константное выражение, т.е выражение, значение которого может быть вычислено на этапе компиляции. Может отсутствовать.

Пример:

X                      DD      3, 2

...

MOV               EAX, [X]

MOV               EBX, [X+4]

Данный способ используется для задания адреса простой переменной или элемента массива с заданным номером.

Базисная адресация. Общий вид адреса: [Регистр + Смещение]. Смещение задается так же, как  для предыдущей адресации. В качестве регистра можно использовать любой 32-битный регистр общего назначения, куда предварительно записывается  адрес начала. Для задания адреса можно использовать операцию OFFSET, которая задается перед переменной и означает определить адрес переменной. Другие способы определения адреса в программе будут рассмотрены ниже. Пример:

MOV EAX, OFFSET X; EAX = &X

MOV EBX, [EAX]; EBX = X

Если в качестве регистра используется регистр ESP или EBP, предполагается, что данные используются из сегмента стека, иначе из сегмента данных, например:

MOV   EBX, [EBP]; Данные из стека

Если необходимо переопределить расположение данных, используется переопределение сегмента, например, пусть данные определены в сегменте данных, для доступа к таким данным через регистр EBP пишут:

MOV   EBX, [DS: EBP];

Способ адресации используется для задания адреса произвольного элемента массива. Регистр задает адрес заданного элемента массива.  Например, для обнуления элемента массива с данными длиной 1 байт, используются команды:




Содержание  Назад  Вперед