МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Государственное образовательное учреждение
высшего профессионального образования
ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФИЗИЧЕСКИЙ ФАКУЛЬТЕТ
Коршунов А.Д. (кафедра радиоэлектроники)
Сборник задач и упражнений для лабораторного практикума по курсу «ЭВУ и системы»
(изучение архитектуры и системы команд INTEL-совместимых микропроцессоров)
г. Иркутск
2007 год
Содержание
Методические указания по использованию сборника…………………………. 3
1. Команда MOV и арифметические команды……………………………….…. 4
2. Команды логических операций, сдвигов, выделение битовых полей……… 4
3. Ветвления. Команды передачи управления ………………………………..... 5
4. Команда LOOP. Обработка данных в цикле без ветвлений ………………… 6
5. Обработка данных в цикле с использованием ветвлений ………………….. .6
6. Работа с видеопамятью (виртуальный дисплей) …………………………….. 7
7. Разные задачи ………………………………………………………………...… 8
8. Задачи на встроенном ассемблере системы Turbo Pascal …………………..... 9
9. Итоговые задания ……………………………………………………………. 10
Методические указания по использованию сборника
Настоящий сборник содержит около 50 задач по программированию на языке Ассемблер для микропроцессоров (МП) фирмы Intel, подобранных таким образом, чтобы выработать у студентов IV курса навыки использования системы команд упомянутых МП, а также способов представления двоичной информации, принятых в различных цифровых системах обработки данных.
Предполагается, что настоящий сборник будет использоваться совместно с учебной программной системой AsmEd, разработанной на кафедре радиоэлектроники физического факультета ИГУ при поддержке соответствующих методических пособий того же автора.
Материал сборника располагается по классическому принципу «от простого - к сложному»: команды пересылки данных и арифметических операций, логические команды и команды сдвигов, организация циклов и ветвлений, работа с массивами данных и строками символов, вывод информации на устройство отображения. В разделах 1 и 2 предполагается использование только линейных алгоритмов. На тот случай, если в лабораторном практикуме будет использован встроенный Ассемблер системы программирования Turbo Pascal, в сборнике предусмотрен раздел 8 (дополнительный). Преподаватели, ведущие занятия в студенческих подгруппах, могут как использовать приведённые задачи и упражнения в готовом виде, так и разрабатывать свои собственные по имеющимся образцам. Преподаватель может как упростить, так и усложнить ту или иную задачу, например, в разделах 1-2 выполнить вывод результата на виртуальный дисплей, в разделе 3 (задачи 3-7) - проверить корректность вводимых данных и т.п.
В начале почти каждого раздела курсивным шрифтом набраны конкретные указания, специфические для данного набора задач. В конце сборника имеются материалы для более сложных (итоговых) заданий, где студент сможет проявить накопленные знания, умения и навыки. Каждое итоговое задание включает в себя несколько вариантов по нарастающей сложности. Для первого варианта приводится алгоритм решения, записанный в виде текста на псевдокоде. Работа над последующими вариантами предполагает изучение текста первого варианта.
Большая часть приведённых здесь заданий разработана автором самостоятельно. При подготовке итоговых заданий, связанных с обработкой графических изображений, автором использованы растровые картинки, разработанные учащимися шестого класса средней школы № 24 г. Иркутска.
При обычном расписании занятий (пять занятий по 4,5 часа) студент должен выполнить не менее 10-15 (в зависимости от сложности) заданий плюс один какой-либо вариант одного из итоговых заданий. Преподаватель предлагает студенту конкретный вариант в зависимости от уровня подготовленности студента. Разумеется, при нехватке времени в силу каких-либо чрезвычайных обстоятельств количество заданий может быть сокращено.
1. Команда MOV и арифметические команды
В нижеследующих примерах следует не только показать результат (число в регистре), но и уметь объяснить, как именно была написана программа, доказать её правильность.
Вычислить значение выражения (53+8)*2 + (150-60)/3. Полученный результат записать в регистр DX. Ответ: 152.
Вычислить значение выражения (1260-450)/2 + 310*3. Полученный результат записать в регистр SI. Ответ: 1335.
Вычислить значение выражения (176 / 2 + 23*3) - (125-50)/3. Полученный результат записать в регистр BX. Ответ: 132.
Вычислить значение выражения (786+35)*3 + (125-50)/5. Полученный результат записать в регистр DI. Ответ: 2478.
Вычислить значение выражения (5684 / 4 + 357 / 3 + 245 / 5)*3. Полученный результат записать в регистр CX. Ответ: 4767.
Вычислить значение выражения (25*7 - 31*2 + 11*3)/2. Полученный результат записать в регистр BL. В регистр BH записать 0. Ответ: 73.
Вычислить значение выражения 150 /3 + 78 / 2 + 365 / 5. Полученный результат записать в регистр CL. В регистр CH записать 0. Ответ: 162.
Вычислить значение выражения (35 / 7)*(78 / 2)-190. Полученный результат записать в регистр BH. В регистр BL записать 0. Ответ: 5.
Вычислить значение выражения (81 / 9)*(65 / 5)-110. Полученный результат записать в регистр CH. В регистр CL записать 0. Ответ: 7.
Вычислить значение выражения 150 / 5 - 35 / 7 + 210 / 3. Полученный результат записать в регистр DL. В регистр DH записать 0. Ответ: 95.
2. Команды логических операций, сдвигов, выделение битовых полей
В задачах нижеследующего раздела в качестве исходного значения предполагается байт, условно названный здесь DataByte, который может быть предварительно записан (командой MOV) в один из регистров МП либо вводиться из какого-либо порта (2 или 3) на вкладке «Ввод-вывод» системы AsmEd. Студент должен разработать программу, которая выделяет данные из указанных битовых полей (каждое такое поле рассматривается как целое без знака), производит над ними указанные действия и выводит результат либо в заданный регистр МП, либо в один из портов (2 или 3). Систему тестов к каждой задаче разрабатывает преподаватель. Один тест дан для примера.
В исходном байте DataByte биты 0…3 содержат двоичный код, который обозначим как А, биты 4…5 - код, который обозначим как В, биты 6…7 - код, который обозначим как С. Вычислить А+2*В+2*С. Тест: ввод - 51h, вывод - 5.
В исходном байте DataByte биты 0…2 содержат двоичный код, который обозначим как А, биты 3…5 - код, который обозначим как В, биты 6…7 - код, который обозначим как С. Вычислить А-В+2*С. Тест: ввод - 8Fh, вывод - 10 (0Ah).
В исходном байте DataByte биты 0…1 содержат двоичный код, который обозначим как А, биты 2…5 - код, который обозначим как В, биты 6…7 - код, который обозначим как С. Вычислить В-A*С. Тест: ввод - BEh, вывод - 11 (0Bh).
В исходном байте DataByte биты 0…4 содержат двоичный код, который обозначим как А, биты 5…6 - код, который обозначим как В, бит 7 - код, который обозначим как С. Вычислить А+В+С. Тест: ввод - C7h, вывод - 10 (0Ah).
В исходном байте DataByte биты 0…2 содержат двоичный код, который обозначим как А, биты 3…6 - код, который обозначим как В, бит 7 - код, который обозначим как С. Вычислить В-A+С. Тест: ввод - D6h, вывод - 5.
3. Ветвления. Команды передачи управления
В задачах этого раздела предполагается разработка программ с использованием команд JZ, JA, JB и т.п., анализирующих исходные данные и направляющих вычислительный процесс по одному из двух (или более) путей, а также команды JMP. Исходные данные и результаты (если это не указано явно) могут находиться либо в произвольных регистрах МП, либо задаваться с помощью портов 2 или 3 на вкладке «Ввод-вывод» системы программирования AsmEd. Преподаватель может усложнить задачу, разместив исходные данные и результаты в каких-либо ячейках ОЗУ, например, DS:0020h или ES:0100h. Теперь студент должен будет использовать в программе косвенную адресацию.
1. Дано целое число. Если оно чётное, то записать в регистр DI значение FFFFh, если нечётное - FF00h.
2. Даны два числа. Записать в регистр SI меньшее, а в регистр DI - большее из них.
3. Дан четырёхзначный номер года. Определить номер столетия, например, при 1492 ответом должно быть "15", а при 1812 - "19". Учесть, что началом века считается первый, а не нулевой год: так, при вводе 2000 ответом будет "20".
4. Супермаркет доставляет продукты питания на дом. Эта услуга оплачивается следующим образом: если сумма покупки не превышает 600 рублей, то доставка обойдётся покупателю в 250 рублей; если сумма покупки лежит в пределах 600...990 рублей, то доставка стоит 150 рублей; если сумма покупки - более 990 рублей, то доставка вообще бесплатная. Написать программу, вводящую сумму покупки и вычисляющую:
а) стоимость доставки; б) стоимость покупки вместе с доставкой.
5. Дано текущее время (M S), где M - это минуты, а S - секунды. Написать программу, определяющую время спустя 1 секунду.
6. Дано текущее время (H M S), где H - это часы, M - это минуты, а S - секунды. Написать программу, определяющую время спустя 1 секунду.
7. Дано целое число в пределах 0..23, представляющее собой московское время с точностью до часа (без минут). Написать программу, вычисляющую иркутское время и выводящую его на экран. Разница во времени между Москвой и Иркутском составляет +5 часов. Решить эту задачу: (а) с применением ветвления; (б) без него, но с использованием команды MOD.
4. Команда LOOP. Обработка данных в цикле (без использования ветвлений)
Дана последовательность символов (строка), размещённая по адресу DS:0000h. Переписать эту строку (сделать копию) в другое место оперативной памяти, по адресу, указанному преподавателем. Варианты: (а) использовать REP MOVSB, (б) использовать LOOP.
Дана последовательность из 10 чисел (байтов), размещённых в сегменте данных, начиная с адреса DS:0010h. Вычислить их сумму и записать результат по адресу DS:0020h.
Дана последовательность из 5 чисел (байтов), размещённых в сегменте данных, начиная с адреса DS:0000h. Вычислить сумму квадратов этих чисел и записать результат по адресу DS:0010h.
Дана последовательность заглавных и строчных латинских букв (строка текста), размещённая по адресу DS:0020h. Преобразовать текст, превратив строчные буквы в заглавные, и записать во вторую строку, которую расположить по адресу, указанному преподавателем. Пример входных данных: “High school”. Результат: “HIGH SCHOOL”. Примечание: необходимо сбросить в ноль 5-й бит в ASCII-коде каждой буквы (команда AND). Исходная строка должна остаться в памяти без изменения.
Дана последовательность символов (строка текста), заполненная так, как указано в предыдущей задаче. Зашифровать/расшифровать данный текст, используя: а) команду XOR, б) команды ROL и ROR.
5. Обработка данных в цикле с использованием ветвлений
В задачах этого раздела под термином «массив» понимается последовательность данных, размещённая каким-либо способом в сегменте DS (система AsmEd легко позволяет сделать это). Результаты подсчётов элементов следует получить в одном из регистров процессора по указанию преподавателя. Второй массив (в задачах 3,6,7) можно разместить как в сегменте DS, так и в сегменте ES.
Дан массив байтов. Подсчитать количество элементов, равных трем.
Дан массив байтов. Подсчитать количество элементов, кратных трем (команда DIV).
Дано два массива байтов, один заполнен числами по указанию преподавателя. Заполнить второй массив следующим образом: все элементы первого массива, стоящие на нечетных местах, возвести в квадрат, стоящие на четных местах – в куб.
Дан массив: а) байтов, б) слов. Подсчитать количество четных элементов.
Дан массив: а) байтов, б) слов. Подсчитать количество элементов, делящихся на 10 и не делящихся на 3.
Дан массив байтов. Сформировать другой массив, в который нечетные элементы из первого массива переписать без изменений, а четные – увеличить на 1.
Дан массив, заполненный двузначными числами. Сформировать другой массив, в котором каждый элемент представляет собой сумму цифр соответствующего числа первого массива.
6. Работа с видеопамятью (виртуальный дисплей)
В нижеследующих задачах студент должен использовать запись информации в видеопамять компьютерной системы. В системе AsmEd эта память начинается с адреса 0F600h и имеет структуру, стандартную для дисплеев IBM PC, т.е. чередующиеся байты кодов символов и цветовых атрибутов. Виртуальный дисплей системы AsmEd работает только в текстовом режиме (возможно использование псевдографических символов, как в задачах 5 и 6). Рекомендуется включить DOS-кодировку (меню «Вид»-«Настройка»-«Символы»), задержка автовыполнения должна быть выключена (равна 0). Разумеется, вывод на дисплей можно комбинировать с задачами из других разделов.
Достарыңызбен бөлісу: |