Бройдо В.Л., Ильина О.П. Архитектура ЭВМ и систем (2006) (1186249), страница 80
Текст из файла (страница 80)
Формат: Нпн орг; О 1оег — возвращает младший байт 16-битового значения орг. Формат: 1оиг орг. В программах используются: 0 атрибуты дистанции: О пеаг — близкий, в пределах одного сегмента; О 1аг — далекий, за пределами одного сегмента; 0 атрибуты типа данных: О Ьу1е — длиной 1 байт; О ччогб — длиной 2 байт; О глногб — длиной 4 байт. Адресация регистров и ячеек памяти в ассемблере При программировании на ассемблере используются неявный, непосредственный, прямой и косвенный методы адресации, причем для адресации регистров в МПП вЂ” только прямой, а для адресации ячеек ОП вЂ” прямой, косвенный и смешанный непосредственный методы. Рассмотрим их на примере адресации второго операнда в команде МОН (переслать). Непосредственная адресация Величина операнда 1(ппрепдепсе) непосредственно указывается в поле команды и может быть задана числом в десятичной, двоичной и шестнадцатеричной сис- А1В>есация регистров и ячеек памяти в ассемблере 365 темах счисления (последний символ числа должен быть, соответственно, Р (или никакой), В и Н) или идентификатором, а также задана простым выражением, в котором указанные элементы связаны символами арифметических операций: +, —, * и /.
Идентификатор (с соответствующим именем, например, сопз1) должен быть предварительно описан в программе директивой типа сопе1 ецио 1024 или сопз1 = 1024. Примеры непосредственной адресации: МОЧ АХ, 10240; МОЧ АС. 64: МОЧ ВХ, 1АН; МОЧ СН. 10110; МОЧ АХ. сопбс: МОЧ АХ. 156*10Н/2 и т.
п. Следует помнить, что диапазон чисел, посылаемых в регистры, ограничивается вместимостью последнего: в 1-байтовый регистр (АН, АС, ВН и т. д.) можно посылать числа в диапазоне от 0 до +255 (целое без знака) или от -128 до+127 (целое со знаком); в 2-байтовый регистр (АХ, ВХ, ОХ и т. д.) — от 0 до +65 535 (целое без знака) или от -32 768 до +32 767 (целое со знаком). Прямая адресация регистров МПП В качестве адреса операнда указывается имя регистра (его символьное обозначение: АХ, АС, АН, ВХ, ВС и т.
д.). Примеры: МОЧ АХ, ВХ, МОЧ ВХ, ОХ, МОЧ АН, ВС. Необходимо следить, чтобы разрядность второго операнда (его регистра) соответствовала разрядности принимающего регистра. Адресация ячеек ОП Напомним, что абсолютный (полный, физический) адрес (А,г ) в общем случае является суммой адресов сегмента (А„) и исполнительного адреса (Амм,), в свою очередь формируемого как сумма максимум трех адресов: смещения (А,„ща), базы (Аг ) и индекса (А„а,), то есть '[абс Ассгм Амсс '[ссгм Асмам [ Абззаг Амггас Прямая адресация ячеек ОП имеет несколько вариантов: О прямая обычная: МОЧ АХ, ро1е.
ро[е — символьное имя переменной Х, для которой в ОП были предварительно отведены (или зарезервированы) ячейки памяти директивами типа ро1е Ов Х, ро1е ОЧЧ Х и т. п. В команде в качестве А„,„берется А,мщ„первой ячейки поля, отведенной для переменной Х; С1 прямая с индексированием: МОЧ АХ, ро1е[81): '[абс "[ссгм+ 1Абаа1 + Асмсщ. В команде в качестве А„,„берется А А щ+ А д (Ам д находится в регистре 81); О прямая с базированием: МОЧ АХ, ро1е[ВХ[: '[мса = '[смсш+ 4гма, Аг находится в регистре ВХ; Глава 1В.
Элементы программирования на языке ассемблера Е) прямая с индексированием и базированием: МОЧ АХ, ро1е[81+ВХ): Анк '~смен+ мккк+ 'без. Существуют два варианта косвенной адресации ячеек ОП: Е) косвенная обычная: МОЧ АХ, [ВХ). Исполнительный адрес извлекается из регистра ВХ, то есть Ал,л - [ВХ); О косвенная с индексированием: МОЧ АХ, [ВХ+81). Исполнительный адрес А„,„- [ВХ+81] берется в виде суммы адресов, находя- шихся в регистрах ВХ и 81.
Смешанная непосредственная адресация ячеек ОП имеет несколько вариантов: ь! непосредственная обычная: МОЧ АХ, оПзе1 ро1е. В качестве операнда берется непосредственно смещение адреса первой ячейки поля памяти, отведенного для переменной Х; о[[зе1 указывает, что берется не значение переменной Х, а именно смешение ее адреса; С3 непосредственная с индексированием: МОЧ АХ, [81+сопм).
В качестве операнда берется сумма значения, храняшегося в регистре 81, и величины сопз1; сопзг может быть задана числом, идентификатором, смещением адреса переменной (ойае1 ро1е) или их комбинацией — простым выражением; ь! непосредственная с базированием: МОЧ АХ, [ВХ+сопз1). Аналогично предыдущему варианту, но регистр 81 замешен ВХ; С[ непосредственная с базированием и индексированием: МОЧ АХ, ро1е[81+ВХ+сопв1).
Аналогично предыдушему, но вместо содержимого одного регистра берется сумма содержимого регистров ВХ и 81. Почти все команды ассемблера за редким исключением (исключения: РОР, Р08Н, СА0, НЕТ, 1ВЕТ) в качестве Ам обычно используют по умолчанию адрес, находящийся в регистре 08 (в исполняемых программах типа .СОМ вЂ” в регистре СЗ); но регистр сегмента может быть задан и явно, например; МОЧ АХ, ЕХ:ро1е; МОЧ АХ, 88:[81) и т.
п. Последняя команда, в частности, позволяет реализовать прямой доступ к ячейке стековой памяти, стек при этом не изменяется. Команды РОР, Р08Н, СА0., НЕТ, 1ВЕТ используют сегмент стека (регистр 88). Основные команды ассемблера По назначению можно выделить команды (в скобках приводятся примеры мнемонических кодов операций команд ассемблера ПК типа! ВМ РС): О выполнения арифметических операций (А00 и АОС вЂ” сложения и сложения с переносом, 80В и ЗВ — вычитания и вычитания с заемом, М00 и 1М00— умножения без знака и со знаком, 01Ч и 101Ч вЂ” деления без знака и со знаком, СМР— сравнения и т.
д.); ь! выполнения логических операций (Ой, АЙО, НОТ, ХОВ, ТЕЗТ и т. д.); Основные команды ассемблера 0 пересылки данных (МОЧ вЂ” переслать, ХСНΠ— обменять,!Н вЂ” ввести в микропроцессор, 00Т вЂ” вывести из микропроцессора и т. д.); 0 передачи управления (ветвления программы: бМР— безусловного перехода, СА11. — вызова процедуры, НЕТ вЂ” возврата из процедуры, д* — условного перехода, ЕСОР— управления циклом и т. д.); 0 обработки строк символов (МОЧ8 — пересылки, СМР8 — сравнения, ЕОО8— загрузки, 8СА8 — сканирования. Эти команды обычно используются с префиксом (модификатором повторения) ВЕР; 0 прерывания работы программы (ИЧТ вЂ” программные прерывания,!КТΠ— условного прерывания при переполнении, !ЯЕТ вЂ” возврата из прерывания); 0 управления микропроцессором (ЗТ* и СЕ* — установки и сброса флагов, НЕТ— останова, Чад!Т вЂ” ожидания, НОР— холостого хода и т.
д.). С полным списком команд ассемблера можно познакомиться в работах [1, 10, 35]. Команды пересылки данных 0 мОч бз1, згс — пересылка данных (воче — переслать из згс в бз1), Пересылает'. один байт (если згс и бзг имеют формат байта) или одно слово (если згс и бз1 имеют формат слова) между регистрами или между регистром и памятью, а также заносит непосредственное значение в регистр или в память.
Операнды бз1 и згс должны иметь одинаковый формат — байт или слово. 8гс могут иметь тип: г (гедЮег) — регистр, в (вевосу) — память, 1 (нпребапсе)— непосредственное значение. Озг могут быть типа г, в. Нельзя в одной команде использовать операнды: гзепв совместно с 1; два операнда типа в и два операнда типа гзепв).
Операнд ~ может быть и простым выражением: воч АХ, 156*10Н аоч АХ, (152 е 1015) / 15 и т. п. Вычисление выражения выполняется только при трансляции. Флаги не меняет. 0 Р08Н згс — занесение слова в стек (разо — протолкнуть; записать в стек из згс). Помещает в вершину стека содержимое згс — любого 16-битового регистра (в том числе и сегментного) или двух ячеек памяти, содержащих 16-битовое слово. Флаги не меняются; 0 РОР бз1 — извлечение слова из стека (рор — вытолкнуть; считать из стека в бз1).
Снимает слово с вершины стека и помещает его в бзà — любой 16-битовый регистр (в том числе и сегментный) или в две ячейки памяти. Флаги не меняются. В командах Р(18Н и РОР операнды бз1 и згс могут быть только типов г и в. ' В книге лля отображения операндов команд приняты обычное обозначение орг н семантические обозначения згс (зобатое — источник) н бзс (безбаас!оа — приемник). 368 Глава 18. Элементы программирования на языке ассемблера Арифметические команды Операнды могут быть двоичные (8 или 16 бит, целые, со знаком или без знака), двоично-десятичные (от 1 до 255 байт, без знака, в упакованном или распакованном (АЗСП-коды) форматах). Машина не обращает внимания на формат и обращается с ними формально, как с двоичными числами в дополнительном коде.
Но для десятичной арифметики после операции требуется коррекция (операции только над одним байтом). Команды сложения, вычитания и сравнения Коигнгды сложения, вычитания и сравпения — двухадресные. О А00 бз1, згс — сложение двоичных чисел (абб — сложить). Прибавляет байт или слово из памяти, регистра непосредственно к содержимому регистра или прибавляет байт или слово из регистра непосредственно к памяти (содержимое вгс складывается с содержимым бв1).