К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 33
Текст из файла (страница 33)
Эти коды, четыре младших бита которых представляют собой ВС?)-коды тех же цифр, следующими двумя командами загрузки записываются в младшие байты регистров К1 и К2. Далее команда АХВ очищает 28 старших разрядов регистра КО, заполняя их нулями и оставляя в четырех младших разрядах ВС?)-код цифры. Затем команда ОКК сдвигает первую ВС??-цифру на четыре разряда влево и помещает ее слева от второй ВС1)-цифры в регистре К2. В завершение упакованные цифры из младшего байта регистра К2 сохраняются в памяти по адресу РАСКЕ?). 142 Глава 3.
Системы команд процессоров АНМ, Мо1ого)а и !п1е! 31 28 27 24 23 1000 1004 — Обновленный [РС) - 1008 Смещение 92 1.0САТ10Х 1100 Рис. 8.6. Команды перехода процессора АНМ: формат команды (е); определение целевого адреса перехода (б) 3.3.1. Установка кодов условий Единственным назначением некоторых команд, в том числе и команды сравнения СМР Кл,Ктл выполняющей операцию [Кл) — [Кт) является установка флагов кодов условий на основе результата операции вычитания. С другой стороны, арифметические и логические операции воздействуют на флаги кодов условий только в том случае, если это явно указано в соответствующем бите кода операции. В ассемблерном коде операции установка флагов обозначается суффиксом Я.
Так, команда АЕ)РБ КО,К1,К2 устанавливает флаги кодов условий, а команда А01) КО,К1,К2 не устанавливает таковые. 3.3,2. Программа с циклом для сложения чисел В программе, которую мы рассмотрим далее, для сложения нескольких чисел применяется цикл (рис. 3.7). В операциях загрузки и сохранения, выполняемых 3.4. Язык ассемблера 143 первой, второй и последней командами, используется относительная адресация. При этом предполагается, что адреса Х, Р01ХТЕК и 311М находятся в допустимом диапазоне смещения относительно адреса, заданного в регистре РС. В памяти по адресу РО1ХТЕК содержится адрес Х11М1 первого из складываемых чисел, по адресу Х вЂ” количество чисел в списке, а по адресу 315М должна храниться резулътирующая сумма. Постиндексный режим с обратной записью, используемый в первой команде цикла, соответствует автоинкрементному режиму, применявшемуся в программе, представленной на рис.
2.16. Загрузка количества элементов списка в К1 Загрузка адреса Х11М1 в К2 Очистка сумматора КО Загрузка следующего числа в КЗ Сложение чисел и помещение результата в КО Декремент счетчика цикла К1 Переход на начало цикла, если сложены не все числа Запись суммы в память 1.0К 1.0К М01г 10К АОО ЗИВЗ ВОТ К1,1ч1 К2,Р01ХТЕК КО,ФО К3,1К21,Ф4 КО,КО,КЗ К1,К1,Ф1 1.00Р 1.0ОР ЗТК КО,311 М Рис. 3.7. Программа для процессора АЯМ, выполняющая сложение последовательности чисел 3.4. Язык ассемблера В языке ассемблера процессора АКМ имеются директивы, задающие порядок и методы резервирования памяти, присвоения числовых значений меткам адресов и символьным константам, определения адресов памяти, по которым должны размещаться программа и блоки данных, а также для определения конца исходного текста программы. Примеры использования некоторых из этих директив вы видите на рис.
3.8, в программе, представляющей собой полный текст программы, основная часть которой приведена на рис. 3.7. Директива АКЕА с аргументом СОВЕ или ВАТА указывает на начало блока памяти, в котором содержатся команды программы или данные. Обычно в ней задаются и другие параметры, но их мы обсуждать не будем. Директива Е1ч1ТКУ определяет, что выполнение программы должно начаться со следующей за ней команды — в нашем случае команды 1.РК. В области данных, которая следует за областью кода, с помощью директив РСВА определяются значения, используемые в качестве операндов команд программы. Эти директивы объявляют метки и присваивают им значения.
Первые две директивы 13С11 инициализируют значениями 0 и 5 слова памяти с метками 311М и Х. Следующая директива помещает по адресу РОПч1ТЕК адрес Х11М1. А последняя директива 12С13 определяет пять чисел, которые должны быть последовательно помещены в память начиная с адреса 1ч111М1.
В шестнадцатеричных значениях констант используется префикс й, а константы по основанию и, где п лежит в диапазоне от 2 до 9, обозначаются как п ххх. Например, двоичная константа может быть представлена так: 2 101100. Константы по основанию 10 задаются без префикса. 144 Глава 3. Системы команд процессоров АВМ, Мо!ого!а и!и!е! Адресная информация Операция и данные Метка адреса памяти Директивы ассемблера АКЕА Е?н ТКУ СОВЕ Команды, на основе которых генерируются машинные команды 1.0ОР Директивы ассемблера Я?1М РО1ХТЕК ХВМ! Рис.
3.8. Более полный вариант программы на языке ассемблера, приведенной на рис. 3.7 Для определения символических имен констант используется директива ЕЯ??. В частности, команда ТЕХ ЕО?) 10 позволяет вместо десятичной константы 10 использовать в программе символи- ческое имя ТЕХ. Когда в программе задействуется большое количество регист- ров, для них удобно использовать символические имена, соответствующие их на- значению. Это делается с помощью директивы К?кг, Например, команда СО???к?ТЕК К?ч' 3 назначает регистру КЗ имя СО???к?ТЕК.
В ассемблере предопределены имена ре- гистров КΠ— К15, РС (для К15) и 1.К (для К14). 3.4.1. ПСЕВДОКОМаНДЫ В языке ассемблера имеется альтернативный способ загрузки адреса ?к???М! в ре- гистр К2 (рис. 3.8). Так, псевдокоманда А?Ж КИ,АВВКЕ33 загружает 32-разрядное значение АВВКЕ53 в регистр КЫ.
Это не настоящая ма- шинная команда. Для реализации псевдокоманд ассемблер сам выбирает подхо- дящие машинные команды. Одним из способов реализации псевдокомандьг А?Ж К2,?к???М! 1.ВК ?.ВК МОЪ' 1.1Ж АВВ ЯгВЗ ВОТ ЗТК АКЕА ВСВ ВСВ ВСВ ВСВ Е?к?В К1,?Ч К2,Р01!ЧТЕК КО,ФО КЗ, [К2),йд КО,КО,КЗ К1,К1,Ф! 1.00Р КО,З?!М ВАТА О 5 МВМ! 3,-17,27,-12,322 3.5. Команды ввода-вывода 145 является использовавшаяся на рис.
3.8 комбинация команды 1.1Ж К2,Р01ХТЕК и директивы Р01ХТЕК ЭСР ХПМ1 Эти две команды в программе можно было бы заменить одной псевдокомандой, поместив ее на место команды Е1Ж. В таком случае ассемблеру самому нужно будет выделить область данных для объявления 1)С1). В нашем примере существует более эффективный способ реализации команды А1Ж, который и будет выбран ассемблером. Если загружаемый командой А1Ж адрес более чем на 255 байт отличается от текущего содержимого регистра РС (К15), укаэанная псевдокоманда может быть реализована командой АЭ1Э К4К15,помещение При использовании этой команды в нашем примере адрес РО1ХТЕК вообще не понадобится.
Ассемблер реализует псевдокоманду А1Ж при помощи машинной команды АЭ1) К2,К15,Ф28 поскольку в момент выполнения команды А1)1) адрес ХПМ1 располагается на 28 байт дальше адреса, содержащегося в обновленном регистре РС. При этом предполагается, что область данных начинается сразу за командой ЗТК. На самом деле это не так, поскольку за командой ЗТК должна следовать команда, возвращающая управление операционной системе, но мы ее опустили. 3.5. Команды ввода-вывода В архитектуре процессоров АКМ применяются команды ввода-вывода с отображением в память, о чем было рассказано в разделе 2.7, Это означает, что для чтения символа с клавиатуры или его вывода на дисплей можно использовать программно-управляемый ввод-вывод.
Предположим, что в регистрах состояния устройств 1ХЯТАТПЗ (клавиатура) и 01)ШТАТ(18 (дисплей) содержатся соответственно управляющие флаги 51Х и ЗОПТ. Регистры клавиатуры 1)АТА1Х и дисплея 1)АТАОПТ располагаются по адресам 1ХЯТАТ118 + 4 и ОБТЗТАТ(18 + 4, сразу за регистрами состояния. Циклы ожидания операций чтения и записи можно реализовать следующим образом. Предположим, что адрес 1ХБТАТБЯ загружен в регистр КЕ В таком случае приведенная далее последовательность команд считывает в регистр КЗ введенный с клавиатуры символ: КЕА1ИЪ'А1Т 1.1Ж КЗ,[К1] ТЯТ КЗ,Ф8 ВЕО КЕАШУА1Т ШКВ КЗ,1К1,й41 146 Глава 3.
Системы команд процессоров АЙМ, Мо1ого!а и !п1е! Команда ТБТ выполняет над своими двумя операндами поразрядную логическую операцию АЛ4?? и с учетом полученного результата устанавливает соответствующие флаги условий. В непосредственно заданном операнде 8 установлен единственный бит — в третьем разряде. Поэтому результат операции ТБТ будет равен нулю, если в третьем разряде регистра 1?ч?БТАТ??Б содержится нуль, и не будет равен нулю в том случае, если в указанном разряде содержится единица, обозначающая, что в регистре ??АТА??ч? имеется очередной введенный пользователем символ. Команда ВЕЯ осуществляет переход по метке КЕА??'у1гА?Т, если результат предшествующего сравнения равен нулю. В итоге получается цикл, выполняемый до нажатия клавиши, в ответ на которое третий разряд регистра 1ХБТАТ??Б устанавливается в 1.
Если предположить, что в регистр К2 загружен адрес регистра 0??ТБТАТ??Б, команды ?!?гК?ТЕ??гА?Т ?Л)К К4,[К2] ТБТ К4,№8 ВЕЯ ?!у'К?ТЕтчгА?Т БТКВ КЗ,[К2,№4]ч- ВЕА?З ?ЛЖ ВЗ,[В1] ТБТ КЗ,№8 ВЕО КЕА?? 1ЛЖВ ВЗ,[К1,№4] БТВВ КЗ,[КО],№1 ЕСНО ?ЛЖ К4,[В2] ТБТ В4,№8 ВЕЯ ЕСНО БТКВ ВЗ,[В.2,№4] ТЕ?? КЗ,№СВ В?ч?Е КЕАО Загрузка [??ч'БТАТ?! Б] и ожидание символа Чтение символа и его сохранение в памяти Загрузка [О??ТБТАТ??Б] и ожидание готовности дисплея Отправка символа на экран Если не вводится символ возврата каретки, считывается следующий символ Рис. Э.в. Программа дпя процессора АНМ, которая считывает символы с клавиатуры и выводит их на экран перешлют символ из регистра КЗ в регистр ??АТАО??Т, когда дисплей будет готов его принять.