К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 48
Текст из файла (страница 48)
Рл1С АРР ЕРХ,1ЕВР+ЕР1'4] ЕРХ4ЕВХ+ЕР1'4) ЕР1 ЕАХ,ЕРХ 1.00Р ЕООРЯТАКТ МОУ РОТРКОР,ЕАХ Рис. 3.49. Программа для процессоров!А-З2, вычисляющая скалярное произведение двух векторов 3.24. Примеры программ ЕВР указывает на вектор А ЕВХ указывает на вектор В ЕСХ используется в качестве счетчика цикла В ЕАХ накапливается сумма произведений ЕР1 выполняет функции индексного регистра Вычисление произведения следующих компонентов Приращение индекса Прибавление произведения к предыдущей сумме Переход к началу цикла, если перемножены еще не все компоненты Сохранение скалярного произведения в памяти 210 Глава 3. Системы команд процессоров АВМ, Мо(ого(а и (п1е( !пт ша!п((пт агяс, с?гаг' агат[)) ( !ог (! - л-1; ]>О; ] - ]-1) [Гог ?г - 1-1; ?г>-0; й - !г-1) [!1 (1?БТ[Ц > ?.!БТ[!)) (ТЕМР - ЫБТ[Ц; ?.?ЗТ[Ц - ?.?БТ[)]; 1!БТ(?] - ТЕМР; ) ) Загрузка указателя на список в бззовый регистр (ЕАХ) и инициализация индексного регистра внешнего цикла (ЕР1) значением )-л — 1 Загрузка в индексный регистр внутреннего цикла (ЕСХ) значения 4 -У вЂ” ! Загрузка значения ?.?БТ(!) в регистр Р1.
Сравнение ?.?БТ(к) и ЫБТ(!) Если ?.?БТ(?г) < 1?ЯТ(!), увеличение индекса й на 1 и переход к новому элементу ЫЗТ(к) В противном случае ?.?ЯТ(й) и 1!БТ0) меняются местами, а в регистр ?Н помещается новое значение ?.?БТф Уменьшение значения индекса внутреннего цикла й Повторное выполнение внутреннего цикла нзи выход из него Уменьшение значения индекса внешнего цикла) Повторное выполнение внешнего цгикла или выход из него 1.ЕА МОЧ РЕС ЕАХ,1?БТ ЕР?,Х ЕР! О??ТЕРс МОЧ РЕС МОЧ 1ХХЕРс СМР )1Е ЕСХ,Е?Н ЕСХ Р?.,[ЕАХч-ЕР!) [ЕАХ+ЕСХ),Р? ХЕХТ [ЕАХ+ЕСХ],1Н.
[ЕАХч-ЕР!),Р?. ЕСХ ХСНС МОЧ ХЕХТ: РЕС )СЕ РЕС ?ХХЕК ЕР1 О??ТЕ?? Рис. З.ВО. Программа сортировки байтов длк лроцессороз!А-32: на кзыке С (з); на языке ассемблера (б) 3.24.2. Программа сортировки байтов На рис. 3.50, 6 вы видите программу для процессора 1А-32, выполняющую сортировку байтов. Она написана по образцу программы, приведенной на рис. 2.34, 6. Регистр ЕАХ инициализируется значением 11БТ и используется в качестве базового регистра для доступа к элементам списка при базовой индексной адресации, Регистр ЕР! служит индексным регистром для внешнего цикла (индекс)), а регистр ЕСХ вЂ” индексным регистром для внутреннего цикла (индекс я). В регистре Р1.
содержится текущий наибольший байт сортируемого подсписка. Программа на рис. 3.50, 6 очень похожа на представленную на рис. 2.34, 6, с той лишь разницей, что в ней элементы ?.1ЗТ(я) и ?.1ЗТ()) меняются местами при помощи одной команды — ХСНС, тогда как второй программе для этой цели требуются целые три команды, а также регистр для временного хранения данных. 3.24.3. Подпрограммы для вставки и удаления элементов связного списка Программы на рис. 3.51 и 3.52, выполняющие вставку и удаление элементов связного списка, очень близки к программам, представленным на рис.
2.37 и 2.38. Параметры им передаются через регистры. Причем регистры с именами КНЕАР, КХЕЖКЕС, К1РЛг]1М, КС11ККЕХТ и КЛЕХТ используются так же, как в универсальных подпрограммах. Указанные имена применяются вместо имен регистров 1А-32 ЕАХ, ЕВХ и т. д. Для хранения кода новой вставляемой записи задействован шестой регистр, КХЕЧгг)Р, в который первая команда подпрограммы с рис.
3.51 загружает код новой записи. Остальная часть подпрограммы один к одному повторяет команды подпрограммы, приведенной на рис. 2.37. Подпрограмма для удаления записей, которую вы видите на рис. 3.52, также полностью повторяет команды подпрограммы с рис. 2.38. Подпрограмма КХЕЖ1Р, [КХЕЪ'КЕС) КНЕАР,О НЕАР КНЕАР,КХЕЪКЕС МОЧ СМР ]С МОЧ Проверка того, пуст ли список Если список пуст, новая запись становится его КЕТ НЕАР: СМР единственным элементом Проверка того, должна ли новая запись стать первой КХЕЪУ1Р,[КНЕАР] ЯЕАКСН [КХЕЖКЕС+4],КНЕАР КНЕАР,КХЕЪ'КЕС ]С МОЧ МОЧ КЕТ МОЧ Если да, делаем ее первой записью списка ЯЕАКСН: КСРККЕХТ,КНЕАР В противном случае с использованием регистров КСПККЕХТ и КХЕХТ производится перемещение по списку в поисках места вставки новой записи йн'СЕКТ ТАП.: Рис.
З.Н1. Подпрограмма для процессоров 1А-32, вставляющая а связный список новый элемент ЕООРЯТАКТ: МОЧ СМР ]Е СМР )1. МОЧ [МР МОЧ МОЧ КЕТ 3.24.2. Программа сортировки байтов 211 КХЕХТ,[КС11ККЕЛТ+4] КХЕХТ,О ТАП. КХЕЪ'1Р,[КХЕХТ] 1ХЯЕКТ КС11ККЕХТ,КХЕХТ ЕООРБТАКТ [КХЕЖКЕСн-4],КХЕХ [КС1)ККЕХТ+4],КХЕЖКЕС 212 Глава 3. Системы команд процессоров АВМ, МоГого1а и 1пге1 Подпрограмма РЕЕЕТ10Н: СМР К1РЫРМ,[КНЕАР] ЯЕАКСН КНЕАР,[КНЕАР-г4] КСБККЕМТ,КНЕАР Проверка того, является ли удаляемая запись первой ,]С МОЧ КЕТ БЕАКСН: МОУ Если да, удаляем ее В противном случае с использованием регистров КСПККЕ]чТ и К]ч'ЕХТ перемещаемся по списку в поисках удаляемой записи ЕООРЗТАКТ: МОЧ СМР ,]Е МОЧ 1МР МОЧ МОУ КЕТ К]ч ЕХТ,[КСБККЕ]4Т+4] К]РНЫМ,[К]ЧЕХТ] РЕДЕЕТЕ КС11ККЕХТ,КНЕХТ ЕООРБТАКТ КТЕМР, [К[к]ЕХТ '-4] [КСПККЕХТч-4],КТЕМР РЕ1.ЕТЕ Рис. 3.52.
Подпрограмма лля процессоров 1ме32, улэляюц1ая элемент из связного списка 3.25. Резюме В настоящей главе были рассмотрены системы команд трех типов процессоров— АКМ, Мотого!а 68000 и 1псе[ 1А-32. Система команд процессора АКМ, как вы помните, основана на архитектуре К]ЯС, а системы команд 68000 и 1А-32 — на архитектуре С1ЯС, причем 1А-32 считается одним из ее наиболее ярко выраженных «представителей». Все команды процессоров АКМ кодируются одним 32-разрядным словом, Операции могут выполняться только нзл данными, содержащимися в регистрах процессора, Для пересылки операндов между регистрами процессора и памятью применяются команды?лаг] и Ясоге. Мы показали, как благодаря возможности условного выполнения всех команд и разнообразию способов сдвига операндов можно наиболее эффективно реализовать типичные программные задачи.
Машинные команды процессора архитектуры 68000 имеют переменную длину, которая зависит от сложности выполняемой операции и количества информации, необходимой для формирования исполнительного адреса операнда в памяти. В отдельных командах могут использоваться и регистры, и данные, хранящиеся в памяти. В архитектуре 1А-32 реализован широчайший набор команд для выполнения самых разных операций над различными типами данных.
Как и в программах на рис. 2.37 и 2.38, в программе вставки в связный список нового элемента для процессоров 1А-32 предполагается, что код новой записи ие совпадает ни с одним из кодов, имеющихся с списке записей, а в программе удаления предполагается, что в списке имеется запись с кодом, заданным в регистре К]Р]кП]М. В упражнениях 3.72 и 3.73 читателю дается задание подумать, как изменить эти подпрограммы таким образом, чтобы в случае ошибочности указанных предположений выдавалось сообщение об ошибке. Упражнения 213 Упражнения Процессоры АНМ 3.1. В регистрах и памяти компьютера АКМ хранится следующая информация. Регистр КО содержит значение 1000.
Регистр К1 содержит значение 2000. Регистр К2 содержит значение 1016. Регистр Кб содержит значение 20. Регистр К7 содержит значение 30. Числа 1, 2, 3, 4, 5 и 6 содержатся в последовательных словах памяти начи- ная с адреса 1000. Каким будет результат выполнения каждого из трех сле- дующих блоков команд при указанных начальных значениях? 3.2. Для каких из перечисленных ниже команд АКМ ассемблер выдаст сообщение о синтаксической ошибке: Почему? 3.3. В случае, когда в регистр процессора АКМ посредством команды ?.оас! из памяти загружается 1 байт, старшие 24 разряда регистра заполняются нулями (см.
раздел 3.1.12). Если загруженный байт представляет 8-разрядное целое число со знаком в форме дополнения до двух, перед использованием а) ?.?)К ?.ЭК ?.?)К б) ?.?Ж ЯТК 5ТК ?.?) К 1?)К 5??В в) ?.ЭМ?А А?)?) а) А?)?) б) 5??В в) МОЪ' г) МОУ д) А?)?? е) А?)?) К8,[КО~ К9,[КО,№41 К10,КЯ,К9 К8,[КО[ Кб,[К1,№ — 4]! К7,[К1,№-4) ! К8,[КЦ,№ К9,[К1[,№ К10,КВ,К9 К2!,(К4,К5) К4,К4,К5 К2,К2,К2 КО,К1 [К2,№4) КО,№2,1010101 КО,№257 КО,К1,К11,?.5?. №8 К4,К4,К5 214 Глава 3.
Системы команд процессоров АЯМ, Мо1ого!а и !п1е! 3.4. 3.5. 3.6. 3.7. 3.8. в арифметических операциях его знак должен быть расширен до 32 разрядов. Предположим, что такой байт загружен в регистр КО. Напишите короткую программу для расширения знака числа до 32 разрядов, то есть на всю длину регистра.
(Подсказка: для копирования содержимого регистра КО после выполнения одной из операций сдвига, ЕЯ„Е5К или АЗК (см. раздел 2.10.2), обратно в КО используйте команду пересылки.) Напишите программу для процессора АКМ, которая изменяла бы порядок битов в регистре К2 на обратный. Например, если первоначально в регистре К2 хранится значение 1110 ... 0100, то после выполнения вашей программы в нем должно содержаться значение 0010...0111. (Подсказка: используйте операции сдвига и циклического сдвига.) В результате трассировки программы может быть получен листинг содержимого некоторых регистров и адресов памяти в указанные моменты выполнения программы.
Как будет каждый раэ изменяться содержимое регистров КР, К1 и К2 после трехкратного выполнения команды ВСТ в программе, представленной на рис. 3.77 Приведите результаты в виде таблицы с именами трех регистров в заголовках столбцов. Содержимое регистров после каждого выполнения команды ВСТ укажите в трех строках таблицы. Данные для программы приведены на рис. 3.8.