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