Бройдо В.Л. Вычислительные системы, сети и телекоммуникации (2002) (1186248), страница 67
Текст из файла (страница 67)
Формат: ез1 орг. Модификаторы присваивания атрибута; ° рс г — изменяет атрибут типа (ьусе, ного или оногс) операнда или атрибут дистанции (пезг или 1аг) адресного операнда. Формат ткп рсг орг. (здесь тип— новый атрибут, орг — идентификатор операнда, чей атрибут должен быть изменен); ° ож, ез:, свд зз: — изменяет атрибут сегмента адреса. Формат: гзедп: адрес. (адрес может быть задан именем сегмента, переменной, меткой или адресным выражением); ° заог1 — дополняет атрибут пеаг метки оператора перехода, указывает, что переход осушествляется на расстояние не более +128 байт от текущей команды. Формат: зЬогг ветка; ° М дЬ вЂ” возвращает старший байт 16-битового значения орг. Формат: М дЬ орг; ° 1он — возвращает младший байт 16-битового значения орг.
Формат: 1он орг. В программах используются: 0 атрибуты дистанции: ° пеаг — близкий, в пределах одного сегмента; ° айаг — далекий, за пределами одного сегмента; сз атрибуты типа данных: ° Ьусе — длиной 1 байт; ° ного — длиной 2 байт; ° оного' — длиной 4 байт. гав Глава 9. Программное п веление — основа автоматизации Адресация регистров и ячеек памяти в ассемблере При программировании на языке ассемблер используются неявный, непосредственный, прямой н косвенный методы адресации; причем для адресации регистров в МПП вЂ” только прямой, а для адресации ячеек ОП вЂ” прямой, косвенный и смешанный непосредственный методы, Рассмотрим их на примере адресации второго операнда в команде МОЪ' (цереслать).
Непосредственная адресация Величина операнда[(ппрепдепсе) непосредственно указывается в иоле команды и может быть задана числом в десятичной, двоичной и шестнадцатеричной системах счисления (последний символ числа должен быть, соответственно, П (или никакой), В и Н) или идентификатором, а также простым выражением, в котором указанные элементы связаны символами арифметических операций: +, —, * и !. Идентификатор (с соответствующим именем, например, сопзт) должен быть предварительно задан в программе директивой типа: сопзт есц 1024 или сопзс - 1024. Примеры непосредственной адресации: МОЧ АХ.10240; МОЧ АШ64. МОЧ ВХ,1АН; МОЧ СН.1011В.
МОЧ АХ.сопзм МОЧ АХ,156*10Н/2 ит. п. Следует помнить, что диапазон чисел, посылаемых в регистры, должен быть ограничен вместимостью последнего: в 1-байтовый регистр (АН, А1., ВН и т. д.) можно посылать числа в диапазоне от О до +255 (целое без знака) или от — 128 до +127 (целое со знаком); в 2-байтовый регистр (АХ, ВХ, СХ н т, д.) — от О до +65535 (целое без знака) или от — 32768 до +32767 (целое со знаком).
Прямая адресация регистров МПП В качестве адреса операнда указывается имя регистра (его символьное обозначение: АХ, А), АН, ВХ, В1 и т. д.). Примеры: МОЧ АХ,ВХ МОЧ ВХ.ОХ МОЧ АН ВС Необходимо следить, чтобы разрядность второго операнда (его репштра) соответствовала разрядности принимающего регистра. Адресация ячеек ОП Напомним, что абсолютный (полный, физический) адрес (А„г,) в общем случае является суммой адресов сегмента (А„...) и исполнительного адреса (А„„,), в свою очередь, формируемого как сумма максимум трех адресов: смещения (А,„...), базы (А4.
) и индекса (А„„,), то есть: Аг, =А,,„„+А„„, =А,„,„+А,„„„,[+Ац,„][+А„„,1 Элементы программирования на языке ассемблер гв7 Прямая адресация ячеек ОП имеет несколько вариантов: а прямая обычная: МОН АХ, ро1е тле ро1 е — символьное имя переменной Х, для которой в ОП были предварительно отведены (или зарезсрвироваиы) ячейки памяти директивами типа: ро1е ОВ Х ро1е ОН Х и т. п. В команде в качествеА.„, берется А,„,„, первой ячейки поля, отведенной для переменной Х; сз прямая с индексированием: МОН АХ.ро1еС511 Ака = Асегм + ~Льыи1 1- Ас-в В команде в качестве Л„„, берстся Л„„, = А,,„, + А„„„,Амк находится в регистре В1); сх прямая с базированием: МОН Ах.ро1е1ВХ) А, = А, „ + Аг .,Аг.
находится в регистре ВХ; Ох прямая с индексированием и базированием: МОН АХ,ро1е[51+ВХ) А„„,-Л, +А„„,+АА °, Существует два варианта косвенной адресации ячеек ОП: Ох косвенная обычная: МОН АХАВХ) Исполнительный адрес берется в регистре ВХ, то есть А„„, = (ВХ11 ОХ косвенная с индексированием: МОН АХ ЛВХ+511 Исполнительный адрес берется в виде суммы адресов, находящихся в регистрах ВХ и 31, А„„, -1ВХ) + 1БЦ. Смешанная непосредственная адресация ячеек ОП имеет несколько вариантов: Ох непосредственная обычная: МОН Ах.о11зет ро1е В качестве операнда берется непосредственно смещение адреса первой ячейки поля памяти, отведенного для переменной Х; ОН15рг указывает, что берется не значение переменной Х, а именно смещение ее адреса; Ы непосредственная с индексированием: МОН АХА5!~сопзт) В качестве операнда берется сумма значения, хранящегося в регистре 31, и величины сопзь: сопзг может быть задано числом, идентификатором, смешением адреса переменной (ОЛзес ро1е) или их комбинацией — простым выраженисм; 288 Глава 9.
Прог аммиое правление — основа автоматизации СХ непосредственная с базированием: ИОЧ Ах.[Вх+соозг! Агпщогичио предыдущему варианту, но вместо регистра Б! берется ВХ; [з непосредственная с базированием и индексированием: ИОЧ Ах,ро1е[51+Вх+соозт! Аналогично предыдущему, но вместо содержимого одного регистра берется сумма содержимого регистров ВХ и 51.
Почти все команды ассемблера за редким исключением (исключения: РОР, Р05Н, САН., НЕТ, 1ВЕТ) в качестве А,,.„, обычно используют по умолчанию адрес, находящийся в регистре ЕХЯ (в исполняемых программах типа .солх — в регистре СЯ); но регистр сегмента может быть задан и явно, например: ИОЧ АХ,ЕХ.ро1е, ИОЧ АХ,55:[51! ит. и. Последняя команда, в частности, позволяет реализовать прямой доступ к ячейке стековой памяти, стек при этом не изменяется.
Команды РОР, Р05Н, СА[[, НЕТ, !НЕТ используют сегмент стека (регистр ВВ). Основные команды языка ассемблер По назначению можно выделить команды (в скобках приводятся примеры мнемонических кодов операций команд ассемблера ПК типа 1ВМ РС): [О выполнения арифметических операций (АОО и АОС вЂ” сложения и сложения с переносом, 50В и 5В — вычитания и вычитания с заемом, ИОЕ и 1И0[ — умножения без знака и со знаком, О!у и 10! Ч вЂ” деления без знака и со знаком, СМР— сравнения и т.
д ); О выполнения логических операций (Ой, АНО, НОТ, ХОР, ТЕ5Т и т. д.); СХ пересылки данных (МОЧ вЂ” переслать, ХСН — обменять, 1М вЂ” ввести в микропроцессор, 00Т вЂ” вывести из микропроцессора и т. д.); [з передачи управления (ветвления программы: ОИР— безусловного перехода, СА[С вЂ” вызова процедуры, НЕТ вЂ” возврата из процедуры, О* — условного перехода, [СОР— управления циклом и т. д.); [а обработки строк символов (ИОЧ5 — пересылки, СМР5 — сравнения, [005 — загрузки, 5СА5 — сканирования, ВЕР— повторения и т.
д.); [О прерывания работы программы (1МТ вЂ” программные прерывания, 1МТΠ— условного прерывания при переполнении, 1ВЕТ вЂ” возврата из прерывания); СХ управления микропроцессором (5Т* и СЕ* — установки и сброса флагов, Н[Т— останова, НА!Т вЂ” ожидания, Е5С вЂ” выхода, НОР— холостого хода и т. д.). С полным списком команд ассемблера можно познакомиться в работах [1, 3, 111. Команды пересылки данных Основш ~е команды пересылки данных: сх ИОч Оэ[,эгс — пересылка данных (шоче — переслать из эгс в Оэт). 289 Элементы программирования на языке ассемблер Пересылает'. один байт (если Вгс и (150 имеют формат байта) или одно слово (если згс и 050 имеют формат слова) между регистрами или между регистром и памятью, а также заносит непосредственное значение в регистр или память.
Операнды 050 и згс должны иметь одинаковый формат — байт или слово. 5гс могут иметь тип; г (гед15 (ег) — регистр, е (гзепогу) — память, з (гагре((зисе)— непосредственное значение. 051 могут быть типа г, ш. Нельзя в одной команде использовать операнды: гзедзг совместно с и два операнда типа е и два операнда типа гзедзг.
Операнд 1 может быть и простым выражением; яот ЯХ. 155*10Н яот ЯХ. (152е10151!15 ит. п. Вычисление выражения выполняется только при трансляции. Флаги не меняет. (З Р05Н згс — занесение слова в стек (роВН вЂ” протолкнуть; записать в стек из згс). Помещает в вершину стека содержимое згс — любого 16-битового регистра (в том числе и сегментного) или двух ячеек памяти, содержащих 16-битовое слово. Флаги не меняются. с( РОР 051 — извлечение слова из стека (рор — вытолкнуть; считать из стека в 051).
Снимает слово с вершины стека и помещает его в 051 — любой 16-битовый регистр (в том числе и сегментный) или в две ячейки памяти. Флаги не меняются. В командах Р05Н и РОР (051 и Вгс) они могут быть только г и в. Арифметические команды Операнды могут быть двоичные (8 или 16 бит, целые, со знаком или без знака), двоично-десятичные (от 1 до 255 байт, без знака, в упакованном или распакованном (АВСП-коды) форматах). Машина не обращает внимания на формат и обращается с ними формально, как с двоичными числами в дополнительном коде. Но дня десятичной арифметики после операции требуется коррекция (операции только над одним байтом). Команды сложения, вычитания и сравнения Команды сложения, вычитания и сравнения — двухадресные.
О АОО г(зт., Вгс — сложение двоичных чисел (аг(д — сложить). Прибавляет байт нлн слово из памяти, регистра непосредственно к содержимому регистра или прибавляет байт или слово из регистра непосредственно к памяти (содержимое згс прибавляет к содержимому 051). Операнды ((51 и Вгс должны иметь одинаковый формат (оба, пли байт, или слово) и могут иметь тип данных: згс — г, зх 1; бз( — г, е (невозможно гзедв, т и нельзя, чтобы оба типа были е или оба гбеде). Команда АОО формирует флаги АР, СР, ОР, РР, 55 и ЕР. С) 505 051, Вгс — вычитание двоичных чисел (зпЬВ(гас( — вычесть). Вычитает байт или слово, взятое из памяти, регистра или непосредственно из содержимого ' В команлак лля отображения операнлоп используется обычное обозначение орг и семантические обозначения згс (заогсе — источник) и бзе (безнпасгоп — приемник).
290 Глава 9. Г! аг аммное п веление — основа автоматизации регистра или вычитает байт или слово, взятое из регистра или непосредственно из памяти (содержимое згс вычитается из солержимого 0зг). Операнды 0з1 и згс должны иметь одинаковый формат (оба или байт или слово) и могут быть: з гс— г, е, 0 0зг — г, а (невозможно гзеде и нельзя, чтобы оба типа были е). Команда 50В формирует флаги ЯГ, СГ, ОГ, РЕ, 5Г и ?Е. С1 СМР 0з1, згс — сравнение (сошраге — сравнить). Сравнивает содержимое двух полей данных; фактически команда вычитает второй операнд (згс) из первого (0зс), но значение 0зг не изменяет, а лишь формирует флаги.