К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 50
Текст из файла (страница 50)
в программе на рис. 3.25. Приведите результаты в виде таблицы с именами трех регистров и адресами памяти в заголовках столбцов. Содержимое регистров и памяти после каждого выполнения указанных команд укажите в шести строках таблицы. Начальные значения, с которыми работает программа, таковы: [ЯГЛМ1 - О, !Х! - 5, Х(ЛМ1 - 2400, а пять чисел— это 83, 45, 156, -250 и 100. 3.28.
Рассмотрим следующую программу для процессора 68000: а) Что делает эта программа? б) Сколько 16-разрядных слов необходимо для хранения данной программы в памяти? в) Приведите выражение для определения необходимого количества обращений к памяти. Данное выражение должно иметь вид Т - а + Ьл + ал, где л — это количество итераций цикла, и — количество невыполненных переходов по адресу ХХТ, а а, Ь и с — константы. 3.29. Рассмотрим программы для процессора 68000, приведенные на рис.
У3.1. а) Оставляют ли эти программы исходное значение по адресу К51.Т? б) Какие задачи они выполняют? МОЧЕА.1. МОЧЕА.1. А1)ВАЛ МОЧЕА.1. МОЧЕ.В 1 ООР СМР.В ВЕЕ 1ЕА МОЧЕ.В ХХТ СМРАЛ ВОТ МОЧЕЛ. МЕМ1,АО МЕМ2,А2 АО,А1 АО,А2 (АО)+,РО (АО)+,1)0 ХХТ -1(АО),А2 (А2),1)0 АО,А1 1.О ОР А2,0ЕБ1КЕ11 Упражнения 21 9 в) Сколько байтов памяти необходимо для хранения каждой из программ? г) Какая программа чаще обращается к памяти? д) Каковы преимущества и недостатки этих программ? Программа 1 Программа 2 №ЗРРРКРО №1.1БТ,АО (АО)а 1.ООР №1,РО 1.ООР -2(АО),КБТ.Т МОЧЕ.ЪЪ' МОЪ'ЕА.Е 1.Я..% ВСС ЕЯ .%' ВС3 МОЪ'ЕЛУ С1.В 1. РО МОУЕА.Е №Е13Т,АО 1.00Р МОЪ"ЕЛЧ (АО)~-,Р1 ВСЕ 1.00Р АРРЯЛ.
№1,РО СМР1 №17,РО В1.Т 1.0ОР МОЪ'Е.ЪЧ -2(АО),КБЕТ 1.00Р Рис. УЗ.1. Два программы дпв процессора 68000 0,1,1,3,3,5,8,13 Ваша программа должна записать эти числа в последовательные слова па- мяти начиная с адреса МЕМ1 ОС. Значение и хранится по адресу Х. Како- во максимальное значение и, допустимое для вашей программы? 3.30. Напишите программу для процессора 68000, которая сравнивает значения соответствующих байтов из двух списков байтов и помещает большее из значений в третий список. Два исходных списка начинаются по адресам Х и У, а результирующий список — по адресу 1.АКСЕК. Длина списка хранится в памяти по адресу Х.
3.31. Напишите программу для процессора 68000, которая выполняла бы ряд задач, связанных с обработкой символов. Строка нз и символов хранится в памяти в виде последовательности байтов начиная с адреса ЕТК1ХС. Еще одна, более короткая строка из ги символов хранится в памяти по адресу Я)ВЕТК1ХС.
Программа должна просмотреть строку, начинающуюся по адресу ЯТК1ХС, чтобы определить, содержится ли в ней непрерывная подстрока, идентичная строке по адресу 30ВБТК1ХС. Параметры и и ги, где и > ги, хранятся в памяти соответственно по адресам Х и М. Если подстрока найдена, в регистр РО должен быть записан ее адрес. В противном случае регистр РО должен быть очищен (установлен в 0). Многократные вхождения строки программа выявлять не должна — нужен только адрес первого вхождения подстроки в строку. 3.32. Напишите программу для процессора 68000, генерирующую первые и чисел последовательности Фибоначчи. В этой последовательности первыми двумя числами являются 0 и 1, а каждое следующее число генерируется путем сложения двух предшествующих чисел. Например, для и - 8 последовательность Фибоначчи такова: Глава 3. Системы команд процессоров АЙМ, Мотого!а и!п1е! 3.33.
3.34. 3.35. 3.36. 3.37. 3:38. Напишите программу для процессора 68000, выполняющую преобразование слова текста, набранного в нижнем регистре, в слово в верхнем регистре. Слово состоит из символов АЗСП, хранящихся в памяти в последовательных байтах начиная с адреса АЛОИЗ, и заканчивается символом пробела. (Сведения об АЗСП-кодах представлены в приложении Д.) Список полученных студентами оценок, приведенный на рис. 2.14, изменился, и теперь для каждого студента в нем содержитсяу' оценок.
Каждый элемент в списке является 16-разрядным словом, так что значение счетчика каждый раз должно увеличиваться на 2. Общее количество студентов составляет л. Напишите программу для процессора 68000, вычисляющую сумму оценок по каждому из тестов и записывающую эти суммы в слова памяти по адресам 511 М, 5БМ ь 4, 5БМ + 8, .... Количество тестов7' больше количества регистров процессора, так что для суммирования оценок не может использоваться программа, аналогичная приведенной на рис. 2.15. Воспользуйтесь вложенным циклом, как предлагалось в разделе 2.5.3. Во внутреннем цикле должна накапливаться сумма по одному тесту, а во внешнем — выполняться проход по всем тестам.
Количество тестову хранится в памяти по адресу 1, который меньше адреса И. Напишите подпрограмму для процессора 68000, считывающую с клавиатуры и символов, помещающую их по мере ввода в пользовательский стек, а затем отображающую их на дисплее. В качестве указателя стека используйте регистр АО. Информация о количестве символов содержится в памяти по адресу Х.
Предположим, что среднее время выборки и выполнения команды программы, приведенной на рис. 3.27, составляет 20 нс. Если символы вводятся с клавиатуры со скоростью 10 символов в секунду, сколько раз для каждого из них будет выполнена команда ВЕЯ КЕАО? Время, уходящее на вывод символа на экран, много меньше времени, проходящего между вводом последовательных символов с клавиатуры. В программе для процессора 68000, приведенной на рис. 3.27, чтение и вывод символов выполняется без вызова подпрограмм. Перепишите эту программу таким образом, чтобы она состояла из главной программы, вызывающей для ввода одного символа подпрограмму ОЕТСНАК, и подпрограммы для вывода одного символа РБТСНАК.
Адреса регистров 1ХЗТАТ115 и?)АТА1Х передаются подпрограмме ОЕТСНАК в регистрах АО и А1, а считанный с клавиатуры символ главная подпрограмма получает через регистр ОО. Адреса регистров 011ТЗТАТ113 и РАТАО11Т и подлежащий выводу символ передаются подпрограмме РУСНАК в регистрах А2, АЗ и ЭО соответственно. Любые другие используемые в подпрограммах регистры должны сохраняться и восстанавливаться с применением стека процессора, указатель на который находится в регистре А7. Запись символов в память и проверка на наличие символа конца строки СК должна выполняться главной программой. Повторите упражнение 3.37, передавая параметры через стек. Упражнения 221 3.39.
Используя очередь, описанную в упражнении 2.18, напишите подпрограм мы АРРЕНП и БЕМОЛЕ для процессора 68000, выполняющие пересылку данных между регистрами процессора и очередью. Будьте внимательны при анализе и обновлении состояния очереди и указателей. 3.40. Напишите программу для процессора 68000, выполняющую ввод с клавиа- туры трех цифр. Каждая цифра представлена АБСП-кодом (см. приложение Д), Вместе эти три цифры составляют десятичное целое число из диапазона от 0 до 999. Первой вводится старшая цифра. Преобразуйте данное число в двоичное представление.
Для того чтобы упростить процесс преобразования, воспользуйтесь хранящимися в памяти двумя таблицами слов, содержащими по десять элементов. Первая из них начинается по адресу ТЕХ8. В ней содержатся двоичные представления десятичных значений О, 10, 20, ..., 90. Вторая таблица начинается по адресу Н1Л~ПЖЕП8 и содержит двоичные представления десятичных значений О, 100, 200, ..., 900. 3.41.
Написанная вами для упражнения 3.40 программа, которая выполняет пре образование из десятичного формата в двоичный, должна содержать две вложенные подпрограммы. Главная подпрограмма вызывает первую подпрограмму и передает ей два параметра через стек процессора. Первым параметром является адрес 3-байтового буфера памяти для хранения введенных десятичных цифр.
Второй параметр — это адрес, по которому должно быть записано результирующее двоичное значение. Первая подпрограмма считывает с клавиатуры три символа и для выполнения преобразования вызывает вторую подпрограмму. На этот раз параметры передаются через регистры процессора. Обе подпрограммы должны сохранять содержимое используемых ими регистров в стеке процессора. а) Напишите две указанные подпрограммы на языке ассемблера процессора 68000. б) Приведите содержимое стека сразу после выполнения команды вызова второй подпрограммы. 3.42.
Рассмотрим массив 16-разрядных чисел А(1,у), где индекс строки 1 прини мает значения из диапазона от 0 до и — 1, а индекс столбцами — значения из диапазона от 0 до т — 1. Этот массив хранится в памяти компьютера с процессором 68000 построчно, а элементы каждой строки занимают т последовательных слов. Напишите подпрограмму для процессора 68000 для по- элементного сложения столбцов х и у с записью сумм в столбец у.