К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 32
Текст из файла (страница 32)
В разделе 3.6 мы еще вернемся к командам множественной загрузки и сохранения и поговорим о них более подробно при обсуждении подпрограмм, где они используются для сохранения в стеке значений регистров и восстановления их из стека. 3.1.3. Регистровые команды пересылки Часто программисту приходится копировать содержимое одного регистра в другой или загружать некоторое непосредственно заданное значение. Команда пересылки МОУ КН,Кгл 138 Глава 3.
Системы команд процессоров АВМ, МоГого!а и 1п1е! формат которой вы видите на рис. 3.2, копирует содержимое регистра Кт в регистр Ккк С помощью втой же команды можно загрузить в регистр Кг[ операнд, заданный в ее 8 младших разрядах. Так, команда М01г КО,№76 загружает в регистр КО значение 76. В обеих формах команды пересылки исходный операнд, прежде чем помещать его в регистр назначения, можно сдвинуть. 3.2. Арифметические и логические команды Процессор АКМ поддерживает множество команд, предназначенных для выполнения арифметических и логических операций над операндами, которые либо содержатся в регистре общего назначения, либо задаются непосредственно в команде. В частности, имеются команды для разных способов сложения и вычитания, две команды для умножения, а также для выполнения логических операций И, ИЛИ, НЕ, Исключающее ИЛИ и очистки бита ([пг с[еаг).
А еще существуют команды сравнения, устанавливающие флаги кодов условий по результатам арифметических или логических операций с двумя операндами. Они не записывают в регистры результаты выполняемых операций. Большинство таких команд имеют формат, показанный на рис. 3.2. 3.2.1. Арифметические команды Базовая структура арифметических команд в языке ассемблера такова: КодОперацни 3Ы,Кгл,Ки Подобная команда выполняет операцию над операндами, хранящимися в регистрах общего назначения Кгл и Кп, и помещает результат в регистр КЫ. В частности, команда АПР КО,К2,К4 выполняет операцию КО + — [К2) н [К4] а команда 80В КО,К6,К5 выполняет операцию КО +- [Кб] — [К5] Вместо того чтобы помещать второй операнд в регистр Кгл, можно задать его прямо в команде. Так, команда ЮЛУ "КО,КЗ,№17 выполняет операцию КО +- [КЗ] -н 17 3.2. Арифметические и логические команды 139 Непосредственно заданное значение содержится в 8-разрядном поле в битах команды Ьз а В команде, до ее выполнения, можно произвести сдвиг или циклический сдвиг второго операнда.
Операция сдвига задается в конце команды. Несколько слов о том, как работает, скажем, команда А?П) КО,К1,К5,?.3?. Фб Сначала второй операнд, содержащийся в регистре К5, сдвигается влево на 4 разряда (что эквивалентно операции [К5] х 16), затем результат прибавляется к содержимому регистра К1 и сумма помещается в регистр КО. Существует две версии команды умножения. Первая из них перемножает содержимое двух регистров и помещает 32 младших разряда полученного произведения в третий регистр. Старшие биты произведения, если таковые имеются, просто игнорируются. Например, команда М?Л. КО,В.1,К2 выполняет операцию КО < — [К1] х [К2] Во второй версии команды умножения задается четвертый регистр, содержимое которого прибавляется к произведению перед сохранением результата в регистре назначения.
Таким образом, команда М?.А КО,К1,К2,КЗ выполняет операцию КО +- [В.1] х [К2] + [ВЗ] Такая операция называется умножением с накоплением. Она часто используется в алгоритмах обработки цифровых сигналов. Примеры приложений этого типа приведены в разделе 3.7. Четвертый регистр задается в поле «Другая информация», показанном на рис. 3.2. В командах умножения не предусмотрена возможность сдвига или циклического сдвига операндов перед их использованием. Некоторые версии архитектуры системы команд АКМ поддерживают операцию умножения для чисел двойной длины (см. главу 11). Операции сдвига операндов Ранее в этой главе уже было отмечено, что одной из отличительных особенностей системы команд процессора АВ.М является то, что все эти команды выполняются условно. Еще одной ее особенностью принято считать интеграцию в большинство команд операций сдвига и циклического сдвига операндов. В системах команд других компьютеров операции сдвига обычно выполняются отдельными командами.
В частности, такие команды применяются процессорами Могого1а 68000 и ?пге1 ?А-З2, описанными во второй и третьей частях настоящей главы. Интеграция в команды операций сдвига и циклического сдвига позволяет уменьшить размер кода и ускорить его выполнение. Она реализуется при помощи специальной 140 Глава 3. Системы команд процессоров АНМ, Мотого!а и!пте! схемы циклического сдвига, размещенной между регистрами и арифметико-логическим устройством в процессоре.
Подробное описание операций сдвига и циклического сдвига процессора АКМ приведено в приложении Б. 3.2.2. Логические команды Логические операции И, ИЛИ, Исключающее ИЛИ и очистки бита в архитектуре АКМ реализованы в виде команд АХР, ОКК, ЕОК и В1С.
У них тот же формат, что и у арифметических команд. Например, команда АХР К4 Кп,Кт выполняет операцию ?КЫ) с- ?Кп? л ?Кт) то есть поразрядное логическое И над операндами, хранящимися в регистрах Кп и Кт. Если в регистре КО содержится, предположим, шестнадцатеричное значение 02РА62СА, а в регистре К1 — значение ООООРРРР, то команда АХР КО,КО,К1 поместит в регистр КО значение 000062СА. Команда В1С тесно связана с командой АХР.
Она дополняет каждый бит операнда Кт, а затем выполняет поразрядную операцию АХР над результатом дополнения и содержимым регистра Кп. Если использовать те же значения регистров КО и К1, что и в предыдущем примере, команда АХР КО,КО,К1 поместит в регистр КО значение 02РАОООО. Команда Моче ХейаС!че с кодом операции МУХ дополняет биты исходного операнда и помещает результат в регистр КЫ. Если содержимым регистра КЗ является шестнадцатеричное значение ОРОРОРОР, то команда МЪХ КО,КЗ помещает в регистр КО значение РОРОРОРО. Г?рограмма упаковки цифр На рис. 3.5 приведена программа для упаковки двух десятичных цифр в байт памяти.
Код универсальной версии атой программы был приведен на рис. 2.31 и описан в разделе 2.10.2. Десятичные цифры, представленные в коде АВСП, хранятся в байтах по адресам ЬОС и ЬОС + 1. Программа упаковывает соответствующие 4-битовые коды ВСР в один байт по адресу РАСКЕР. В первой команде загрузки представленной на рис. 3.5 программы предполагается, что адрес ЬОС хранится в памяти по адресу РО1ХТЕК, Как вы узнаете из раздела 3.4, для помещения адреса ЬОС в память по адресу РО1ХТЕК можно воспользоваться специальной директивой ассемблера. Мы применяем такой способ 3.3.
Команды перехода 141 ?.?)К КО,РО?ХТЕК 1?)КВ К1,[КО[ ?.?ЖВ К2„[КО,№1] АХ?1 К2,К2,№с Г ОКК К2,К2,К! ?5?., №4 Загрузка адреса 10С в КО Загрузка символов АЯС?1 в регистры К1 н К2 Очистка 28 старших разрядов регистра К2 Добавление в регистр К2 сдвинутого влево содержимого регистра К1 Сохранение упакованных цифр ВС?) в памяти по адресу РАСКЕ?1 яткВ к2,РАске?т Рис. 3.5. Программа на языке процессора АЯМ длв упаковки 4-битовых десятичных цифр в один байт 3.3. Команды перехода В командах условного перехода задается 24-разрядное смещение в форме дополнения до двух со знаком, которое должно быть добавлено к обновленному содержимому регистра РС, в результате чего получится целевой адрес перехода. Формат команды перехода приведен на рис.
3.6, а, а ее пример — на рис. 3.6, б. Команда ВЕО (ВгапсЬ 11 Ег?ца[ го 0 — переход, если равно 0) вызывает переход, если флаг 2 установлен в 1. Условие, от которого зависит направление перехода, задается в четырех старших разрядах слова команды, Ьзь зз. Команда перехода подобно любой другой команде АКМ выполняется лишь в том случае, если текущее состояние флагов кодов условий соответствует условию, заданному в поле «Условие» команды.
К моменту вычисления целевого адреса перехода содержимое регистра РС уже обновлено и включает адрес команды, расположенной на два слова дальше команды перехода. Например, если команда перехода располагается по адресу 1000, а целевой адрес равен 1100 (как на рис. 3.6, б), то величина смещения должна быть равной 92, поскольку в момент вычисления адреса 1100 обновленный регистр РС будет содержать значение 1000 + 8 - 1008. загрузки адреса 1.ОС в регистр КО потому, что 32-разрядные цдреса не могут непосредственно задаваться в командах. Значение по адресу РО?ХТЕК указывает на два ЛЯСН-кода цифр, хранящихся в последовательных байтах.