Запись модифицируемых адресов в ЯА




Уточним правила записи модифицируемых адресов в Я А.

Пусть А обозначает адресное выражение, а Е - любое выражение (адресное или константное), тогда в ЯА допустимы следующие три основные формы записи адресов в командах, которые задают следующие исполнительные адреса:

(Замечание: если Е=0, то 0 можно опустить: 0[М] = [М].)

Напомним еще раз, что в ПК в качестве регистра-модификатора можно использовать не любой регистр, а только один из следующих четырех: ВХ, ВР, SI или DI. При модификации только по одному регистру модификатором может быть любой из этих четырех регистров. Однако при модификации по двум регистрам в ПК разрешается указывать не любую пару регистров-модификаторов а только такую, где один регистр - это ВХ или ВР, а другой регистр - SI или DI.

Замечание о регистре ВР. Этот регистр используется обычно для работы cо стеком, для доступа к его элементам, о чем будет рассказано в гл. 8. Использовать этот регистр для модификации адресов из других участков памяти нельзя (точнее, можно, но особым образом). Поэтому мы пока забудем про этот модификатор, как будто бы его и нет.

Отметим, что модификация адреса не меняет тип адреса: например, если XI имя байтовой переменной, то TYPE X[SI] = BYTE. Если же перед модификатором указано константное выражение (например, 1[ВХ]), то тип такого адреса считается неопределенным.

Помимо трех указанных основных способов записи адресов в ЯА допускаются и другие, являющиеся производными от этих трех. Но прежде чем рассмотреть их, опишем принятые в ЯА соглашения об использовании квадратных скобок при записи операндов команд.

1) Запись в квадратных скобках имени регистра-модификатора (ВХ, ВР, SI или DI) эквивалентна выписыванию содержимого этого регистра (тогда как имя регистра без квадратных скобок обозначает сам регистр).

Примеры:

Отметим, что заключать в квадратные скобки имена регистров, не являющихся модификаторами (АХ, SP, DS, AL и т. п.), нельзя.

2) Любое выражение можно заключить в квадратные скобки, от этого его смысл не изменится (в то же время снятие скобок может изменить смысл).

Примеры:

3) Следующие записи эквивалентны: [х][у] - [х]+[у] - [х+у]

Другими словами, выписывание рядом двух выражений в квадратных скобках означает сумму этих выражений.

Пример:

MOV CX,[BX][SI];= MOV СХ,[BX]+[SI] - MOV CX,[BX+SI]

Так вот, используя эти соглашения вместе со свойством коммутативности сложения и отталкиваясь от трех основных способов записи адресов в командах, можно получить новые варианты записи адресов. Например, в каждой из следующих строк указаны эквивалентные формы записи одного и того же адреса:

А+1,[А+1], [А]+[1], [А][1], А[1], 1[А], [А]+1,...

5[SI], [5][SI], [5]+[SI], [SI+5], [SI]+5,...

A-2[BX], [A-2]+[BX], [A-2+BX], A[BX-2], A[BX]-2,...

A[BX][DI], A[BX+DI], [A+BX+DI], A[BX]-f-[DI],...

0[BX][SI], [BX][SI], [BX]+[SI] [BX+SI], [SI][BX],...

Итак, в ЯА один и тот же адрес можно записать разными способами. Однако при этом следует помнить, что используемая запись должна быть эквивалентной одной из трех основных форм записи таких адресов. В частности, в записи не должно быть:

  • суммы двух адресов (А+В);
  • суммы, одним из слагаемых которой является регистр (ВХ+2);
  • запрещенных сочетаний регистров ([SI+DI]);
  • регистров, не являющихся модификаторами (А[СХ], 2[ВL);
  • имени или числа непосредственно за [] ([SI]5, [ВХ]А).

Кроме того, адрес не должен сводиться к числу ([5]), т. к. тогда это будет константное выражение, а не адресное.

В остальном ограничений нет, и каждый выбирает ту форму записи, что ему больше нравится. Мы в дальнейшем будем использовать форму, в которой до скобок ставится имя переменной, а остальные слагаемые указываются в квадратных скобках (например, A[SI+3]). Такие записи похожи на привычные обозначения переменных с индексами в языках высокого уровня (A[i+3]).

И еще одно замечание. Адресные выражения с модификаторами можно использовать при записи операндов команд и некоторых директив (EQU, РП и др.), но ни в коем случае нельзя указывать в директивах определения данных. Например, директива

X DW 1[SI]

является ошибочной, т. к. ассемблер обязан вычислить ее операнд еще на этапе трансляции программы, чтобы подставить его значение в ячейку X, но в Это время значение регистра SI, конечно, неизвестно.

Список рекомендуемой литературы

Основная литература

 

1. Брэдли Д. Программирование на языке ассемблера для персональной ЭВМ фирмы IBM: Пер. с англ. – М.: Радио и связь, 1988. – 448 с.

2. Финогенов К.Г. Основы языка Ассемблера. – М.: Радио и связь,2000.

3. Юров В. Assembler. Специальный справочник. – СПб.: Питер, 2001.

4. Юров В. Assembler. Практикум. – СПб.: Питер, 2001.

5. Юров В., Хорошенко В. Assembler – Учебный курс.- СПб.: Питер, 2000.

Дополнительная литература

  1. Абель П. Язык ассемблера для IBM PC и программирования/ Пер. с англ. Ю.В. Сальникова.-М.:высш.шк.,1992.-447с.
  2. Юров В., Хорошенко С. Ассемблер (учебный курс) Санкт- Петербург, Москва, Харьков, Минск: из-во Питер, -1999.-672с.
  3. Зубков С.В. Assembler, DOS, Windows и Unix.-М.:ДМК, 1999.-640с.
  4. Глушков В.Н. Основы безбумажной информатики Изд. 2-е, испр. М: Наука, 1987. 552с.
  5. Склэнон Л. Персональные ЭВМ IBM РС и ХТ. Программирование на языке ассемблера: Пер. с англ. – М.: Радио и связь, 1991. – 336с.
  6. Абель П. Язык Ассемблера для IBM РС и программирования: Пер. с англ. – М.: Высшая школа, 1992. – 477с.
  7. Нортон П., Сохуэ Д. Язык ассемблера для IBM РС: Пер. с англ. – М.: Издательство «Компьютер»; Фиансы и статистика, 1992. – 352 с.
  8. Пильщиков В.Н. Программирование на языке ассемблера IBM РС. – М.: «Диалог - МИФИ», 1999 – 288с.
  9. Использование Turbo Assembler при разработке программ. – Киев: «Диалектика», 1994. – 288с.
  10. Лямин Л.В. Макроассемлер МАSM. – М.: Радио и связь, 1994. – 320с.
  11. Лавров С. Программирование. Математические основы, средства, теория. – СПб.: БХВ-Петербург, 2004.–320 с
  12. Айдарханов М.Б. Принципы синтеза алгоритмов и решений в задачах групповых классификаций //доклады АН РК. – А., 1992. – N3. – С.21-25.
  13. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ. / Предисл. Н.В.Гайского. – М.: Финансы и статистика, 1991. – 544 с.
  14. Абрамов С.А., Зима Е.В. Начала информатики. – М: Наука, 1989
  15. Могилев, Хеннер. Информатика. Учебник.
  16. Аладьев. Основы информатики. Учебное пособие.

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: