К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 46
Текст из файла (страница 46)
дисплея Отправка символа на дисплей Если это не символ возврата каретки, считывается следующий символ Рис. 3.44. Программа для процессоров Ми32, считывающая с клавиатуры строку символов н отображающая ее на экране 3.21.2. Изолированный ввод-вывод В наборе команд 1А-32 существуют две команды, предназначенные исключительно для ввода и вывода, — 1Х и 01,гТ.
В них задаются адреса памяти, расположенной вне адресного пространства, которое используется другими командами. В отличие от ввода-вывода с отображением в память, когда память устройств ввода-вывода находится в том же адресном пространстве, что н основная память компьютера, описанные операции называются шолированным вводом-выводом.
Для указания конкретного адресного пространства, используемого в текущей команде, предназначена отдельная выходная управляющая линия. Для адресуемого побайтово адресного пространства ввода-вывода применяются 16-разрядные адреса. Первые 256 адресов можно задавать непосредственно в 8-разрядном поле команд 1Х и ОПТ.
Вот какой формат имеет команда ввода, в которой используется этот режим: 1Х КЕС,1эЕЧА1э1Ж Здесь регистром назначения КЕС может служить регистр А1. или ЕАХ, что зависит от длины пересылаемого операнда — 8 или 32 разряда. В последнем поле команды содержится 8-разрядный адрес устройства 1ЭЕЧАТ11Ж.
Соответствующая команда вывода такова: 011Т ЭЕЧА111УК,КЕО Поскольку память устройств ввода-вывода адресуется побайтово, буферный регистр данных клавиатуры может располагаться по адресу ВЕЧАТ11Ж, а ее 8-разрядный регистр состояния — по адресу 11ЕЧАПЭК ч- 1.
1.ЕА КЕАРл ВТ ,1ХС МОЧ МОЧ 1ХС ЕСНО: ВТ 1ХС МОЧ СМР 1ХЕ ЕВР,|ОС 1ХБТАТББ,З КЕА1У А1.,1УАТА1Х [ЕВР],А1. ЕВР ОПТЯТАТ118 ЕСНО 1)АТАОБТ,З А1.,СК КЕАП ЕВР указывает на область памяти Ожидание ввода символа в РАТА1Х Пересылка символа в А1. Сохранение символа в памяти и увеличение значения указателя Ожидание готовности 3.21. Операции ввода-вывода 201 Все 16-разрядное адресное пространство вмещает 64 Кбайт адресуемых единиц хранения.
На него можно ссылаться через регистр РХ посредством команды ввода 1Х КЕС,РХ где регистром КЕС может быть регистр А1. или ЕАХ. Здесь 16-разрядный адрес устройства содержится в регистре РХ, представляющем 16 старших разрядов регистра ЕРХ, а размер пересылаемого значения определяется размером операнда КЕС. Соответствующая команда вывода такова: ОПТ РХ,КЕС 3.21.3. Блочная пересылка В дополнение к командам 1Х и ОПТ, пересылающим между процессором и устройством ввода-вывода один информационный элемент, в архитектуре системы команд 1А-32 определены две команды блочной пересылки; КЕР)Х3 и КЕРО11Т3. Они предназначены для последовательной передачи блоков данных между памятью и устройством ввода-вывода.
Суффикс 3 в кодах этих операций означает зтг1э8 (строка), а префикс КЕР— гереат (повторять 1пересылку элементов, пока не будет переслан весь блок данных]). Параметры, определяющие операцию пересылки, задаются не в командах КЕР1Х3 и КЕРО(1Т3, а в регистрах РХ (16-разрядный адрес устройства ввода-вывода), ЕР1 (32-разрядный адрес начала блока в памяти) и ЕСХ (количество пересылаемых элементов данных).
Суффикс В или Р в мнемоническом обозначении кода операции определяет размер элемента — байт или двойное слово. Команда КЕР1ХБВ пересылает блок байтов, а команда КЕР1ХБР— блок двойных слов. Команды блочной пересылки работают так: после пересылки каждого элемента данных значение индексного регистра ЕР1 увеличивается на 1 или 4, в зависимости от размера элемента данных, а значение регистра ЕСХ уменьшается на 1. Операции пересылки повторяются до тех пор, пока содержимое регистра-счетчика ЕСХ не станет равным О.
Таким образом, каждая команда блочной пересылки эквивалентна целому программному циклу с регистром ЕСХ в качестве счетчика цикла. Для примера рассмотрим ситуацию, когда блок из 128 двойных слов пересылается с диска в основную память. Двойное слово данных содержится в адресуемом буферном регистре данных дискового устройства по адресу Р13КРАТА. Блок данных должен размещаться в памяти начиная с адреса МЕМВЕОСК. В регистр счетчика ЕСХ необходимо записать начальное значение 128.
Для выполнения пересылки можно применить последовательность команд ЕЕА ЕР1,МЕМВЕОСК МОЧ РХ,Р13КРАТА МОЪ' ЕСХ,128 КЕР1ХБР В ней предполагается, что метка МЕМВ1.ОСК объявлена как адресная метка, а Р13КРАТА — как метка данных, определенная директивой ЕЙ) и представляющая 16-разрядный адрес буферного регистра данных устройства. 202 Глава 3. Системы команд процессоров АГгМ, Могого!а и !п1е! Теперь вы знаете, как выполняется изолированный ввод-вывод и как при помощи одной команды можно произвести пересылку блока, состоящего из большого количества элементов данных, с использованием регистров-счетчиков адреса (Е?)1) и элемента данных (ЕСХ).
3.22. Подпрограммы Как было отмечено в разделе 2.9, стек процессора удобно применять для выполнения операций, связанных со входом в подпрограммы и возвратом из таковых. В архитектуре 1А-32 в качестве указателя стека используется регистр ЕБР, указывающий на текущую вершину стека процессора (то есть на его верхний элемент).
Стек растет в направлении уменьшения адресов. Принцип его организации описан в разделе 2.8. Ширина стека составляет 32 разряда, а это означает, что его элементы являются двойными словами. Существует четыре команды лля проталкивания элементов в стек и выталкивания их из стека.
Команда Р??8Н вгс уменьшает значение ЕБР на 4, а затем сохраняет двойное слово по адресу эгс в па- мяти, который указан в ЕБР. Команда РОР РОР г?зг выполняет обратную операцию: считывает из памяти двойное слово, на которое указывает Е8 Р, то есть считывает из стека верхний элемент, а затем сохраняет его по адресу г?эг и увеличивает значение ЕБР на 4, удаляя тем самым верхний элемент из стека. Регистр ЕБР используется в этой команде неявно.
Исходный и результирующий операнды задаются в одном из режимов адресации 1А-32. Еще две команды предназначены для выталкивания из стека и проталкивания в него сразу нескольких элементов. Команда Р??БНА?) проталкивает в стек содержимое восьми регистров общего назначения, от ЕАХ до ЕШ, а команда РОРА?) выталкивает их из стека в обратном порядке. При извлечении сохраненного значения ЕБР команда РОРО удаляет его из стека, не загружая в регистр ЕБР, и продолжает выталкивать последующие элементы, записывая их в соответствующие регистры.
Применение этих двух команд при реализации подпрограмм позволяет более эффективно сохранять и восстанавливать содержимое всех регистров. Приведенную на рис. 3.40, а программу можно переписать в виде подпрограммы, как показано на рис. 3.45, Параметры будут передаваться ей через регистры. Адрес первого из складываемых чисел, МЗМ1, загружается вызывающей программой в регистр ЕВХ, а количество складываемых чисел, Х, — в регистр ЕСХ. В вызывающей программе предполагается, что сумма будет записана подпрограммой в регистр ЕАХ.
Таким образом, регистры ЕВХ, ЕСХ и ЕАХ используются для 3.22. Подпрограммы 203 СА1 1. 1.1ЯТАРР Первым делом эта команда проталкивает в стек адрес возврата, а затем выполняет переход по адресу 115ТАРР. Содержимое стека после сохранения в нем содержимого регистра ЕР1 показано на рис. 3.45, б. Адрес возврата в нашем примере — зто адрес команды МОЪ', непосредственно следующей в вызывающей программе за командой СА1.1..
Команда НЕТ возвращает управление вызывающей программе, выталкивая из стека содержимое указателя команды Е1Р. Вызывающая программа 1.ЕА ЕВХ,1ч11М1 МОУ ЕСХ,Ы САЕЕ 1.1ЯЕАРР МОУ ЗРМ,ЕАХ Загрузка параметров в регистры ЕВХ и ЕСХ Переход к подпрограмме Сохранение суммы в памяти Подпрограмма Е!СТАРР: РПКСН МОУ Сохранение содержимого ЕР1 ЕР1 будет использоваться в качестве индексного регистра ЕАХ будет использоваться лля накопления суммы Прибавление следующего числа Увеличение значения индекса Уменьшение значения счетчика Если 1ЕСХ] > О, выполняется переход к началу цикла Восстановление значения ЕШ Возврат в вызывающую программу ЕР1 ЕР1,0 МОУ ЕАХ,0 БТАЕТАРР: АРР 11т1С РЕС зб ЕАХ, 1ЕВХ 4 ЕР1~41 ЕШ ЕСХ ЯТАЕТАРР РОР ЕЕТ ЕР1 ЕЯР— тн- Рис.
3.45. Программа с рис. 3.40, в, переписанная в виде подпрограммы для процессоров ы-32; паРаметРы передаются через регистры: вызывающая программа и подпрограмма [ай содержимое стека после сохранения значения Еп! в подпрограмме (б] На рис. ЗА В показан еще один вариант этой же программы, в котором параметры передаются подпрограмме через стек. передачи параметров. Регистр ЕР1 подпрограмма при выполнении сложения задействует в качестве индексного регистра, поэтому его содержимое должно сохраняться и восстанавливаться при помощи команд Р11БН и РОР. Подпрограмма вызывается командой 204 Глава 3. Системы команд процессоров АКМ, Мо1ого)а и )п1е) показанном на приведенном ниже рисунке.) (Вершина стека располагается на уровне 2 Вызывающая программа Р()БН ОРРБЕТ Х()М1 РЫБН Х САЬЬ Ь1БТАПП АПП ЕБР,4 РОР Б()М Проталкивание параметров в стек Переход к подпрограмме Удаление счетчика Х из стека Выталкивание суммы в БПМ Подпрограмма Ь)БТАПП; РЫБН МОЧ Сохранение Е1Н Этот регистр будет использоваться в качестве индексного Сохранение ЕАХ Этот регистр будет использоваться для накопления суммы Сохранение ЕВХ и загрузка адреса ХЫМ1 Сохранение ЕСХ и загрузка счетчика Х Прибавление следующего числа Увеличение значения индекса Уменьшение значения счетчика Если сложение не завершено, выполняется переход к началу цикла На место Х()М1 в стеке записывается сумма Восстановление значений регистров ЕП1 Е()1,0 РПБН МОУ ЕАХ ЕАХ,О РПБН МОУ РПБН МОЧ БТАКТАП)): АПП Пь)С ПЕС ,)б ЕВХ ЕВХ, (ЕБРч-20) ЕСХ ЕСХ,)ЕБР 20) ЕАХ (ЕВХ"-ЕП1*4) Е1Н ЕСХ БТАКТАПП МОЧ (ЕБРь24ьЕАХ РОР РОР РОР РОР КЕТ ЕСХ ЕВХ ЕАХ ЕП1 Возврат в вызывающую программу Уровень 3 — ь Уровень 2 — ь Уровень 1 — ь б Рис.
3.43. Программа с рис. 3.40, а, переписанная в виде подпрограммы для процессоров )А-32 (параметры передаются через стек): вызывающая програыма и подпрограмма (а); содержимое стека после сохранения значения Еп) в подпрограмме (б) Параметры ХПМ1 и Х проталкиваются в стек двумя командами РЫБН в вызывающей программе. После выполнения команды САЬЬ вершина стека распо- 3.22.
Подпрограммы 205 лагается на уровне 2. Регистры ЕШ, ЕАХ, ЕВХ и ЕСХ используются так жс, как в подпрограмме на рис. 3,45. Их значения сохраняются в стеке, затем в них загружаются начальные значения и параметры. Эту работу выполняют первые 8 команд подпрограммы. В результате вершина стека оказывается на уровне 3. После сложения чисел при помощи цикла из четырех команд сумма помещается в стек иа место параметра НУМ1. Выполнив команду КЕТ, команды вызывающей программы АРР и РОР удаляют из стека параметр Х и помещают результирующую сумму в память по адресу 5ИМ, возвращая вершину стека на уровень 1. Адрес Команды Комментарии Вызывающая программа РБЗН РАКАМ2 РПЗН РАКАМ1 САУЛ. 5ЫВ! РОР КЕ51Л.Т АРР Е5Р,4 2000 2006 2012 2017 Помещение параметров в стек Сохранение результата Восстановление уровня стека Сохранение регистра указателя на фрейм Загрузка указателя на фрейм Сохранение регистров Загрузка первого параметра Загрузка второго параметра РАН РАКАМЗ САЕЕ 5РВ2 РОР ЕСХ 2160 2165 ]ЕВКн-8],ЕРХ ЕРХ ЕСХ ЕВХ ЕАХ ЕВР Помещение результата в стек Восстановление регистров Сохранение регистра указателя на фрейм ЕВК ЕВР,ЕЗР ЕАХ ЕВХ ЕАХ,]ЕВРе8] Загрузка указателя на фрейм Сохранение регистров Загрузка параметров МОЪ' РОР РОР РОР КЕТ [ЕВР+8],ЕВХ ЕВХ ЕАХ ЕВР Помещение результата 5РВ2 в стек Восстановление регистров Рис.