К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 35
Текст из файла (страница 35)
Для загрузки байтов Е1БТ(1) в регистр КО и байтов Е15Т(А) в регистр К1 во внешнем и внутреннем циклах используется преиндексный режим адресации. АРК К1,АУЕС АРК К2,ВНЕС 1.РК КЗ,1ч1 МОУ КО,№0 1.00Р 1.РК К4,(К11,№4 1Л)К К5,[К2],№4 М1.А КО,К4,К5,КО К1 указывает на вектор А К2 указывает на вектор В КЗ используется в качестве счетчика цикла В КО накапливается сумма произведений Загрузка компонента вектора А Загрузка компонента вектора В Умножение компонентов и прибавление произведения к содержимому регистра КО Уменьшение значения счетчика Переход к началу цикла, если перемножены еще не все компоненты Сохранение скалярного произведения в памяти 152 Глава 3.
Системы команд процессоров АЯМ, Мо1ого)а и )п1е) тг шасп(Шс асяс, с)саг' агат[]) ( сот () - и-1; )>О; ) = )-1) ((ог )с - )-1; )с>-0; )с - )с-1) ()г (Е)БТ[сс] > 1 15Т[1]) (ТЕМР - ЫЗТ[й]; ЫБТ[/г] =- 1.15Т[А; ЫБТ[1] - ТЕМР; А))В 1.ЭВ В4,ЫБТ К10,)с) А()Е) АО1) Ы) КВ МОЧ К2,К4,К10 К5,К4,№1 КО,[В2,№-1]! КЗ,В2 ОПТЕК Рис. 3.16. Программа сортировки байтов для процессора Айвп на языке С (а); на языке ассемблера (б) Чтобы поменять элементы ЫБТ((с) и ЫЯТ()) местами, производится условное выполнение команд, являющееся одной из отличительных особенностей системы команд процессора АКМ. Последовательность из трех команд, ЯТВ„БТК и МОЧ, реализуется лишь в том случае, если ЫЗТ()с) > МАНТО), на что указывает суффикс СТ.
Поэтому условный переход по метке ]с]ЕХТ, использовавшийся в программе на рис. 2.34, б, в программе для процессора АКМ не нужен, 3.7.3. Подпрограммы для вставки и удаления элементов связного списка Программы, которые выполняют вставку и удаление элементов связного списка (рис, 3.16 и 3.17), очень близки к программам, приведенным на рис. 2З7 и 2.38. Ы) КВ СМР БТВСТВ ЗТКСТВ МОЧСТ СМР В)с)Е СМР ВНЕ КЦКЗ,№-1]! В1,КО К1,[К2] КО,[КЗ] КО,К1 КЗ,К4 1)ч')с)ЕК К2,В5 О()ТЕК Загрузка указателя списка в Регистр К4 и инициализация базового регистра внешнего цикла К2 значением 1.1ЯТ е л Загрузка значения ЫЗТ + 1 в К5 Загрузка значения ЫБТ(1) в КО Инициализация базового регистра внутреннего цикла КЗ значением 1.15Т + п — 1 Загрузка ЫЗТ()с) в К1 Сопоставление ЫБТ(ст) и ЫЯТП) Если ЫБТ(/с) > ЫЗТ()), ЫЗТ()с) и Е1БТП) меняются местами, а в КО помещается новое значение ЫЗТ(1) Если Й > О, повторное выполнение внутреннего цикла Если) > 1, повторное выполнение внешнего цикла 3.7.
Примеры программ 153 Однако в них не производятся условные переходы вперед, поскольку блок ко- манд, который в программах из главы 2 нам приходилось перепрыгивать, процес- сор АКМ позволяет выполнять условно (как в программе на рис. 3.15). Парамет- ры обеих подпрограмм для процессора КАМ передаются через регистры. Проверка того, пуст ли список Если пуст, ои вставляется в начало новой записи Если ие пуст, проверяется, должна ли новая запись стать первой, и, если да, вставляем ее Если новая зались ие должна стать первой, ищем, куда ее следует вставить Новая запись становится последней 1.ООР МОЪгЕО РС,К14 1.РК КО,[КХЕХТ1 СМР КО,К1 МОНЕТ КСПККЕХТ,КХЕХТ Идем дальше? Да, затем переходим на начало цикла В1.Т БТК БТК МОЪг 1.ООР КХЕХТ,[КХЕЪ'КЕС,№4] КХЕЪЪ'КЕС,[КСБККЕХТ,№4 РС,К!4 Иначе между текущей и следующей записями вставляется новая запись Рис.
3.16. Подпрограмма для процессора АИМ, вставляющая новый элемент в связный список Для ссылки на регистры вместо обычных обозначений К[ могут использоваться мнемонические обозначения, соответствующие назначению регистров в программе. Для определения мнемонических имен регистров предназначена ассемблерная директива КХ. Как и в программах на рис. 2.37 и 2.38, в регистре КНЕАР хранится адрес первой записи списка, а в регистре КХЕЪЪгКЕС вЂ” адрес вставляемой записи. В регистре К[РОМ содержится код удаляемой записи, а в регистрах КСПККЕХТ и КХЕХТ вЂ” адреса связывания, используемые подпрограммами для перемещения по списку и поиска позиций вставляемой и удаляемой записей.
Подпрограмма вставки, приведенная на рис. 3.1б, соответствует программе, которую вы видите на рис. 2.37, и имеет такую же структуру. Первые три ее команды вставляют новую запись в начало (оно же конец) пустого списка. Напомним, что первоначально в поле связывания новой записи содержится нуль. Третья команда в этом блоке выполняет операцию возврата из подпрограммы в вызывающую программу, Следующие шесть команд определяют, должна ли новая запись стать новым началом непустого списка. Список упорядочен по возрастанию значений кодов записей. Поэтому, если код записи, содержащийся в первом слове первой Подпрограмма 1ХБЕКТ!ОХ СМР МОЪ'ЕО МОЪгЕО 1.РК 1.РК СМР ЗТКОТ МОЪгЕЯ МОЪ'ЕЯ МОЪг 1.РК СМР ЯТКСТ КНЕАР,№О КНЕАР,КХЕЪЪтКЕС РС,К14 КО,[КНЕЛР1 К1,[КХЕЪЪгКЕС) КО,К1 КНЕАР,[ КХЕЪЪтКЕС,№4) КНЕАР,КХЕ%'КЕС РС,К14 КСБККЕХТ,КНЕЛР КХЕХТ,[КСБККЕХТ,№4) В.ХЕХТ,№О КХЕ%'КЕС,[КСПККЕХТ,№4) 164 Глава 3.
Системы команд процессоров АНМ, Мо1ого!а и 1п1е! записи списка, больше кода новой записи, то новая запись становится первой записью списка. В этом случае связывание элементов списка производится при помощи условно выполняемых команд 3ТКСТ и МОЧСТ. Если же запись вставляется не в начало списка, оставшаяся часть подпрограммы определяет место ее вставки, включая и вариант вставки ее в конец списка. Подпрограмма ОЕ1.ЕТ10Х 1.ОК СМР 11)КЕО МОЧЕО МОЧ КО,[КНЕАО[ КО,К1ОХ11М КНЕА1ЦКНЕА11,№41 РС,К14 КС11ККЕХТ,КНЕА11 1.0ОР Если да, удаляем ее и выходим из подпрограммы В противном случае осуществляется переход к началу цикла для продолжения поиска 1.ООР Рис.
Э.17. Подпрограмма для процессора АНМ, удаляющая элемент из связного списка Подпрограмма удаления элемента списка приведена на рис. 3.17. Если удаляемая запись является первой записью списка, первые четыре команды обнаруживают это, удаляют ее и производят выход из подпрограммы. В противном случае оставшаяся часть подпрограммы просматривает список в поисках удаляемой записи, используя регистры КСБККЕХТ и КХЕХТ. Пара команд 1.11КЕЯ,/3ТКЕ14 удаляет зались, на которую указывает регистр КХЕХТ. Как и в универсальных подпрограммах, приведенных на рис. 2.37 и 2.38, в подпрограмме вставки на рис. 3.16 предполагается, что код новой записи не совпадает ни с одним другим кодом из числа имеющихся в списке записей, а в подпрограмме удаления на рис.
3.17 делается предположение о том, что в списке содержится запись с кодом, указанным в регистре К1ВХ1[М. В упражнениях 3.23 и 3.24 читателю будет предложено изменить эти подпрограммы таким образом, чтобы в случае невыполнения указанных предположений оии сообщали об ошибке. Система команд процессора Мо~ого! а 68000 Далее на примере системы команд процессора 68000 будет рассмотрена базовая архитектура семейства процессоров 680ХО компании Мо1ого[а. В это семейство входят несколько процессоров с различной производительностью.
В основе всех 1.ОК ЫЖ СМР ЕОКЕО БТКЕО МОЧЕО МОЧ КХЕХТ,[ КС11ККЕХТ,№4) КО,[КВЕХТ) КО,КП)ХУМ КО,[КХЕХТ,№41 КО,[КС11ККЕХТ,№4] РС,К14 КС11ККЕХТ,КХЕХТ Проверка того, является ли удаляемая запись первой Если да, удаляем ее и выходим нз подпрограммы В противном случае продолжаем поиск Является лн следующая запись удаляемой? 3.8. Регистры и адресация 155 процессоров 680ХО лежит одна и та же архитектура, но последние процессоры этого семейства имеют дополнительные элементы, повышающие их производительность.
Мы выбрали процессор 68000 по той причине, что его легче охарактеризовать, а к тому же он хорошо отражает архитектуру всего семейства. Разумеется, мы не приводим здесь полного описания процессора, так как читатель при желании может найти таковое в документации от производителя, представленной на его яеЬ-узле по адресу Ыр://кччъ.шотого! а.сош.
Нас интересуют лишь самые важные аспекты архитектуры, позволяющие писать, ассемблировать и выполнять простые программы. Отличительные особенности различных членов семейства 680ХО и некоторые их элементы, связанные с повышением производительности, перечислены в главе 11. Важнейшие воэможности рассматриваемого процессора иллюстрируются программами из главы 2, переписанными на языке ассемблера 68000.