К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 38
Текст из файла (страница 38)
В системе команд процессора 68000 определены команды перехода с двумя типами смещения. Первый тип — это короткое смещение длиной 8 бит, задаваемое в слове кода операции. Такие команды могут использоваться в тех случаях, когда в момент вычисления адрес перехода расположен на расстоянии от г127 до — 128 байт от адреса, указанного в счетчике команд. Напомним, что содержимое счетчика команд увеличивается после выборки из памяти каждого слова, и это означает, что смещение определяет расстояние от слова, следующего за кодом операции команды перехода.
Второй тип смещения — это 16-разрядное смещение, задаваемое в слове, следующим за словом кода операции. Им определяется гораздо больший диапазон допустимых значений целевых адресов (х32 Кбайт). В этом случае смещение представляет собой расстояние от слова расширения до целевого адреса перехода. Пример использования команды перехода с коротким смещением приведен на рис. 3.24. Здесь показано, как реализовать для процессора 68000 программный цикл, представленный на рис. 2.16. Обратите внимание, что в атой программе применяется команда Ресгешепп Поскольку у процессора 68000 такой команды нет, мы воспользовались командой ВПВО„(5пЪсгасг Цшс)г — быстрое вычитание), вычитающей непосредственно заданное значение операнда, 1, из содержимого регистра Р1.
Это значение в виде 3-разрядного операнда включается в слово кола операции команды ВПВО, поэтому для представления данной команды достаточно одного слова. В системе команд процессора 68000 определено целых 16 команд условного перехода, каждая из которых поддерживает 8- и 16-разрядное смещение. Кроме того, имеется команда безусловного перехода ВКА, всегда выполняющая переход по заданному адресу. Все эти команды подробно описаны в табл. В.5 и В.б.
На рис. 3.25 представлена программа для процессора 68000, аналогичная приведенной на рис 2.16. В ней используются регистры данных РО и Р1, первый из которых предназначен для накапливания суммы, а второй служит счетчиком, а также адресный регистр А2, указывающий на выбираемые из памяти операнды. Обратите внимание на то, что в данном случае задействован адресный регистр, а не регистр данных, поскольку в автоинкрементном режиме адресации допускается применение только адресных регистров.
8.11. Управление потоком выполнения программы 167 15 87 0 Адрес перехода - [обновленный РС) е смещение -и — 1.00Р АРРЛЧ (А2)ч,РО ЗиВЕЧ ГЦЬ? 1.00Р 1000 1002 ВсТ МООР 1004 1006 Цикл на языке ассемблера Представление цикла в памяти В момент вычисления целевого адреса перехода )РС) - 1006 Адрес перехода - 1006 — 6 - 1000 Рис.
3.2Я. Команды перехода процессора 68000 с малым смещением: формат команды (а); пример ее использования в цикле на рис. 2.16 16) МОУЕ.?. Х,Р МОУЕ.?. ФХ?)М1,А Если ?Р1] ы О, переход на начало цикла Сохранение суммы в Б?)М Рис. 3.26. Программа для процессора 68000, аналогичная представленной на рнс. 2.16 программе сложения Команды декремента и перехода В дополнение к обычным командам перехода процессор 68000 поддерживает ряд более сложных команд с интегрированным счетчиком, используемых для организации циклов.
Вот их формат: РЬсс Рп,?.АВЕ?. С?.Е.?. РО 1.00Р АРР.Ъ' (А2)+,РО Б??ВО,.?. Ф1,Р1 ВОТ 1.00Р МОУЕ.1. Р0,8?)М Х содержит количество складываемых элементов л, а Р1 используется как счетчик, определяющий, сколько раз нужно выполнить цикл А2 служит указателем на элементы списка. Он инициализируется значением Х?)М1, то есть адресом первого элемента списка РО применяется для накопления суммы Прибавление очередного числа к РО Уменьшение значения счетчика 168 Глава 3.
Системы команд процессоров АВМ, Мо1ого!а и !п1е! где суффикс сс обозначает условие перехода. Например, команда?)ВСТ с суффиксом СТ выполняет переход при выполнении условия «если большем Полный список условий перехода приведен в табл. В.б. Однако в командах перехода описанного типа условие перехода используется иначе, чем в остальных командах перехода. + Если условие, определяемое суффиксом сс, выполняется, то следующей реализуется команда, указанная непосредственно после команды ?)Всс. + Если же условие, определяемое суффиксом сс, не выполняется, то значение 16 младших разрядов регистра Пп уменьшается на 1.
При условии, что результат равен — 1, осуществляется переход к команде по адресу ?.АВЕ?.. Команды ?)Всс мощнее обычных команд перехода, поскольку решение о переходе зависит не от одного, а от двух условий. Если определять то же действие при помощи обычных команд перехода, потребуется последовательность из трех команд: сначала команда перехода проверит условие сс, далее команда декремента уменьшит содержимое регистра счетчика, после чего еще одна команда перехода выполнит переход на основе результата операции декремента. Например, команды ?)Ъсс ?)3,?.СОР Следующая команда эквивалентны такой последовательности команд: Всс Ъ?ЕХТ 5??ВЯ Ф1,?)3 ВСЕ ?.ООР Следующая команда ХЕХТ Команды ?)Всс удобно рассматривать как средство управления циклом, обеспечивающее выход из цикла по достижении определенного условия.
Количество повторений цикла зависит от содержимого регистра счетчика, которым в приведенном выше примере является ?)3. В одной из команд ?)Всс, ?)ВР (?)есгетепт апг? ВгапсЪ 1? Ра?зе — декремент и переход, если ложно), используется условие, которое всегда ложно. Поэтому решение о переходе принимается только на основе значения счетчика. Указанная команда удобна для организации циклов, выполняемых строго заданное количество раз.
У нее даже имеется второе имя, а именно ?)ВКА (?)есгетепт апг? ВгапсЬ А?тчауэ — декремент и переход всегда). Для того чтобы продемонстрировать, насколько удобны команды декремента и перехода, мы переписали их с использованием программы, приведенной на рис. 3.25. Ее новый вариант показан на рис. 3.26. В первом случае (рис. 3.25) регистр ?) 1 инициализировался значением и. Однако поскольку команда ?) ВВА выполняет переход, когда значение счетчика больше или равно нулю, в программе на рис. 3.26 регистр ?) 1 инициализируется значением п — 1. Общее количество команд в обеих программах одинаково, но во втором случае программа реализуется быстрее, поскольку цикл в ней короче.
3.12. Операции ввода-вывода 169 Помешаем значение л — 1 в регистр-счетчик Р1 МО"тгЕ.1 Х,Р1 Я??ВО,.?. №1,Р1 МОУЕА.?. №Х??М1,А2 СЖ.?. РО ? ООр АРР.Ж (Л2)+,РО РВИА Р1,?.ООР МОЧЕ.1 Р0,6??М Цикл назад до [Р11 - — 1 Рис. 3.26. Программа для процессора 68000, которая выполняет ту же задачу, что и программа, представленная на рис. 3.25 3.12. Операции ввода-вывода ЕЕАГНЧА?Т ВТЯТЛЧ №3,1ХЯТАТРВ ВЕЯ ЕЕАР'ттгА?Т МО тгЕ.В РАТА1Х,Р1 Команда проверки бита ВОТ определяет состояние одного бита операнда назначения и устанавливает значение флага кода условия 2 равным дополнению до единицы проверенного бита.
Позиция проверяемого бита (в нашем примере зто бз) задается первым операндом. Предположим, что бит бз в регистре состояния дисплея 011ТЯТАТРВ содержит флаг управления выводом БО??Т. В таком случае для вывода на дисплей символа из регистра Р1 можно выполнить такие команды: ЮЕ?ТЕ%"А?Т ВТЯТЖ №3,0??ТЯТАТУ8 ВЕО %'Е?ТЕ%"А?Т МОЪ'Е.В Р1,РАТАО??Т На рис.
3.27 приведена программа для процессора 68000, которая считывает с клавиатуры одну строку символов, сохраняет ее в памяти и выводит на дисплей. Эта программа соответствует программе, приведенной на рис. 2.20. Предполагается, что строка заканчивается нажатием клавиши ЕП1ег. Символы записываются в память начиная с адреса 1.0С. Процессор 68000 требует, чтобы все буферы состояния и данных в интерфейсах устройств ввода-вывода адресовались так, как если бы они располагались в основной памяти. Это означает, что программно-управляемый ввод-вывод в компьютере 68000 должен выполняться по принципу, описанному в разделе 2.7. Предположим, что разряд бз в регистре состояния клавиатуры 1ХБТАТР 8 содержит флаг управления вводом 8?Х.
Тогда для ввода символа с клавиатуры можно выполнить следующие команды: 170 Глава 3. Системы команд процессоров АВМ, Мо1ого!а и!п1е! Инициализация регистра счетчика А1, чтобы он содержал адрес, по которому в память должен быть записан первый символ строки Ожидание появления символа в буфере клавиатуры 1)АТА1)ч Пересылка символа из ОАТА11ч в память (в результате флаг 8Пч' устанавливается в О) Ожидание готовности дисплея МОУЕА.Ь №1.ОС,А1 КЕА1) ВТБТЛЧ №3, Пч1БТАТПБ ВЕО КЕА() МОЪ'Е.В ЭАТА1Х,(А1) еснО Втятлч №3,Оьтт8тАт()Б ВЕО ЕСНО МОЧЕ.В (А1),ЭАТАОПТ Пересылка только что прочитанного символа в выходной буферный регистр (в результате БОЬтТ устанавливается в О) Проверка того, является ли только что прочитанный символ символом возврата каретки (СК).