К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 49
Текст из файла (страница 49)
Напишите программу для процессора АКМ, сравнивающую значения соответствующих байтов из двух списков байтов и помегцаюшую большее иэ значений в третий список. Два исходных списка начинаются по адресам Х и У, а результирующий список — по адресу ?АКСЕК. Длина списка хранится в памяти по адресу Х. Напишите программу для процессора АКМ, которая бы выполняла задачу, связанную с обработкой символов. Известно, что строка из и символов хранится в памяти в виде последовательности байтов начиная с адреса 5ТК1ХС. Еще одна, более короткая строка из гя символов хранится в памяти по адресу 5ПВЗТК1ХС. Программа должна просмотреть строку, начинающуюся по адресу 5ТК1ХС, и определить, содержится ли в ней непрерывная подстрока, идентичная строке по адресу 5ПВЗТК1ХС.
Параметры п и гя (л > лг) хранятся в памяти по адресам Х и М соответственно. Если подстрока найдена, в регистр КО должен быть записан ее адрес. В противном случае регистр КО должен быть очищен (установлен в 0). Многократные вхождения строки программа выявлять не должна — нужен лишь адрес первого вхождения подстроки в строку.
Напишите программу для процессора АКМ, генерирующую первые л чисел последовательности Фибоначчи. В этой последовательности первыми двумя числами являются 0 и 1, а каждое следующее число генерируется путем сложения двух предшествуюп1их. Например, для и - 8 последовательность Фибоначчи такова: О, 1, 1, 3, 3, 5, 8, 13 Ваша программа должна записать эти числа в последовательные слова па- мяти начиная с адреса МЕМЕОС.
Значение и хранится по адресу Х. Упражнения 215 3.9. Напишите программу для процессора АКМ, выполняющую преобразование слова текста, набранного в нижнем регистре, в слово в верхнем регистре. Слово состоит из символов АБСП, хранящихся в памяти в последователь- ных байтах начиная с адреса ЖОКС, и заканчивается символом пробела. (Сведения об АЯС?1-кодах представлены в приложении Д.) 3.10.
Список полученных студентами оценок, приведенный на рис, 2.14, изме вился, и теперь для каждого студента в нем содержится )оценок. Количество студентов равно и. Напишите программу для процессора АКМ, вычисляющую сумму оценок по каждому из тестов и записывающую эти суммы в слова памяти по адресам ЗБМ, ЗБМ + 4, ЯПМ + 8,.... Количество тестов) больше количества регистров процессора, так что для суммирования оценок не может использоваться программа, аналогичная приведенной на рис.
2.15. Воспользуйтесь вложенным циклом, как предлагалось в разделе 2.5.3. Во внутреннем цикле должна накапливаться сумма по одному тесту, а во внешнем — выполняться проход по всем тестам. Количество тестов г' хранится в памяти по адресу ), который меньше адреса Х. 3.11. Рассмотрим массив чисел А(Ц), где индекс строки 1 принимает значения от 0 до п — 1, а индекс столбца~' — значения от 0 до т — 1. Данный массив хранится в памяти компьютера АКМ построчно, а элементы каждой строки занимают гэ последовательных слов. Напишите подпрограмму для процессора АКМ, предназначенную для позлементного сложения столбцов х и у с записью сумм в столбец у. Индексы х и у передаются подпрограмме в регистрах К1 и К2, параметры я и т — в регистрах КЗ и К4, а адрес элемента А(0,0) — в регистре КО, Допускается применение любых режимов адресации из табл.
3.1. п символов, помещающую их по мере ввода в пользовательский стек и отображающую их на дисплее. В качестве указателя стека используйте регистр Кб. Информация о количестве символов и содержится в памяти по адресу Н. 3.13. Предположим, что среднее время выборки и выполнения команды про- граммы, приведенной на рис. 3.9, составляет 20 нс. Сколько раз для каждого из введенных символов будет выполнена команда ВЕО КЕАП, если символы вводятся в клавиатуры со скоростью 10 символов в секунду? Время, уходящее на вывод символа на экран, значительно меньше времени, проходящего между вводом последовательных символов с клавиатуры. В программе для процессора АКМ, приведенной на рис. 3.9, чтение и вывод символов выполняется без вызова соответствующих подпрограмм.
Перепишите эту программу таким образом, чтобы она состояла из главной программы, вызывающей подпрограмму СЕТСНАК для ввода одного символа и подпрограмму РПТСНАК для вывода одного символа. Адрес регистра 1ХЯТАТПЗ передается подпрограмме СЕТСНАК в регистре К1, а считанный с клавиатуры символ главная подпрограмма получает через регистр КЗ. Адрес регистра ОПТБТАТПЗ и подлежащий выводу символ передаются подпрограмме РБТСНАК в регистрах К2 и КЗ соответственно. Любые 3.14. 3.12. Напишите подпрограмму для процессора АКМ, считывающую с клавиатуры 216 Глава 3. Системы команд процессоров Аям, Могого!а и ~пге! 3.15. 3.16. 3.17. 3.18.
3.19. 3.20. другие используемые в подпрограммах регистры должны сохраняться и восстанавливаться с использованием стека, указатель на который находится в регистре К13. Эапись символов в память и проверка на наличие символа конца строки СК должна выполняться главной программой. Повторите упражнение 3.14 с передачей параметров через стек. Напишите программу для процессора АКМ, выполняющую ввод с клавиатуры трех цифр. Каждая цифра представлена АЯСП-кодом (см. приложение Д). Вместе эти три цифры составляют десятичное целое число из диапазона от 0 до 999.
Сначала вводится старшая цифра. Преобразуйте это число в двоичное представление. Для упрощения преобразования в памяти хранятся две таблицы слов, содержащие по 10 элементов. Первая из них начинается по адресу ТЕХЯ. В ней содержатся двоичные представления десятичных значений О, 10, 20, ..., 90. Вторая таблица начинается по адресу Н1)ХПКЕПЗ и содержит двоичные представления десятичных значений О, 100, 200, ..., 900. Программа для преобразования из десятичного формата в двоичный, которую вы написали в упражнении 3.16, должна содержать две вложенные подпрограммы. Главная подпрограмма вызывает первую подпрограмму и передает ей два параметра через стек, указатель на который находится в регистре К13.
Первым параметром является адрес 3-байтового буфера памяти для хранения введенных десятичных цифр. Второй параметр — это адрес, по которому должно быть записано результирующее двоичное значение. Первая подпрограмма считывает с клавиатуры три символа и вызывает вторую подпрограмму для выполнения преобразования.
На этот раз параметры передаются через регистры процессора. Обе подпрограммы должны сохранять содержимое используемых ими регистров в стеке. а) Напишите две указанные подпрограммы на языке ассемблера процессора АКМ. б) Приведите содержимое стека сразу после выполнения команды вызова второй подпрограммы.
Используя очередь, о которой речь шла в упражнении 2.18, напишите подпрограммы АРРЕХ1) и КЕМОУЕ для процессора АРМ, выполняющие пересылку данных между регистрами процессора и очередью. Будьте внимательны при анализе и обновлении состояния очереди и указателей.
Приведите результаты трассировки программы сортировки байтов, показанной на рис. 3.15, б в формате, описанном в упражнении 3.5. Покажите содержимое регистров КО, К2 и КЗ и последовательности из 5 байт, расположенных по адресам Е15Т, Е1ЯТ -~ 1, ..., Е13Т + 4, после каждого выполнения последней команды программы.
Предполагается, что Е13Т 1000, начальными значениями байтов являются 120, 13, 106, 45 и 67, а «Е15Т1 - 120. Перепишите приведенную на рис. 3.15, б программу сортировки байтов в виде подпрограммы, сортирующей список последовательно расположенных в памяти 32-разрядных положительных целых чисел. Вызывающая прогрзм- Упражнения 21 7 Процессор Мо1ого!а 68000 3.26. 3.21.
3.22. 3.23. 3.24. ма должна передавать подпрограмме адрес этого списка. Первое 32-разрядное число по указанному адресу определяет количество элементов списка, за которым следуют сортируемые значения. Рассмотрим программу сортировки байтов, приведенную на рис. 3.15, б. На каждом проходе по подсписку от 1.1$Т(?) до 1.13Т(0) все элементы списка, для которых 1.15Т(я) > 1.1ЯТ(у), меняются местами. В качестве альтернативы можно отслеживать адрес наибольшего значения в подсписке и в конце просмотра выполнять не более одного обмена. Перепишите программу с использованием второго подхода. Каковы его преимущества? Предположим, что список полученных студентами оценок, представленный на рис.
2.14, хранится в памяти в виде связного списка (рис. 2.36). Напишите программу для процессора АВМ, выполняющую ту же задачу, что и программа на рис. 2.15. Первая запись списка хранится в памяти по адресу 1000. Приведенная на рис. 3.16 подпрограмма вставки записи в связный список не проверяет код этой записи на предмет совпадения с кодами других записей, уже имеющихся в списке. А что произойдет в случае совпадения? Модифицируйте подпрограмму таким образом, чтобы в указанном случае она возвращала в регистре В10 адрес записи, код которой совпадает с кодом вводимой записи, или О, если вставка выполнена успешно.
Подпрограмма удаления записи из связного списка (рис. 3.17) не проверяет наличия в списке записи с кодом, указанным в регистре КП)Х1)М. Модифицируйте эту программу таким образом, чтобы в случае успешного удаления она возвращала в регистре ВП)ХПМ значение 0 или оставляла содержимое этого регистра неизменным, если запись в списке не найдена. Рассмотрим следующее состояние процессора 68000. Регистр 1)0 содержит значение $1000.
Регистр АО содержит значение $2000. Регистр А1 содержит значение $1000. В памяти по адресу $1000 содержится $2000. В памяти по адресу $2000 содержится $3000. Каким будет результат выполнения каждой из трех перечисленных ниже команд при указанных начальных значениях? Сколько байтов занимает каждая команда? Сколько обращений к памяти требуется на выборку и выполнение каждой из комапд? а) А?Н).1. 1)0,(АО) б) А1)1).1.
(А1,1)0),1)0 в) АРР.1. №$2000,(АО) Найдите синтаксические ошибки в следуюших командах процессора 68000: а) А1)Е)Х -(А2),03 218 Глава 3. Системы команд процессоров АЯМ, МоГого!а и !пге! б) 15КЛ. №9,1)2 в) МОЧЕ.В 520(А2,1)2) г) 51)ВАЛ. 12(А2,РС),АО д) СМР.В №254,$12(А2,1)1.В) 3.27. В результате глрассировки программы может быть получен листинг содержимого определенных регистров и адресов памяти в указанные моменты выполнения программы. Каким будет содержимое регистров 1)0, 1)1 и А2, а также адресов памяти Х, ХПМ1 и 5ПМ каждый раз после пятикратного выполнения команды АЭ1).Ъ' и после выполнения последней команды МОКРЕЛ.