Лло. Методические указания к выполнению лабораторных работ Пенза 2009 удк 612 05
Скачать 33.03 Kb.
|
Министерство образования Российской Федерации Пензенский государственный университет Кафедра «Вычислительная техника» ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АСЕМБЛЕР ПЭВМ IBM PC Методические указания к выполнению лабораторных работ Пенза 2009 УДК 612.3.05 Даны методические указания и задания к выполнению цикла лабораторных работ по программированию на языке ассемблера персональных ЭВМ типа IBM PC. Приведены примеры программ. Методические указания подготовлены на кафедре "Вычислительная техника" Пензенского государственного университета и предназначены для студентов специальности 220100 при выполнении лабораторных работ по дисциплине "Алгоритмические языки и программирование". Составители: Дорошенко И.Н., Никишин А.В., Шевченко Н.И., Домнин Л.Н. ОБЩИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ Порядок выполнения работыПолучите у преподавателя задание на выполнение очередной работы (вариант и дополнительные указания) и уясните цель работы). Разработайте структуру программы и схемы алгоритмов программных модулей. Реализуйте алгоритмы в виде текста на языке ассемблера. Подготовьте тестовые наборы данных, необходимые для отладки программы и демонстрации ее работоспособности. Используя подходящий текстовый редактор, перенесите ассемблерный текст на дисковый носитель в виде файла, имя которого должно иметь расширение asm. Выполните компиляцию программы, используя компилятор применяемой в учебном процессе системы программирования (например, tasm.exe). Проанализируйте результаты компиляции (файл *.lst) и при обнаружении сиснтаксических ошибок выполните коррекцию текста программы и повторите пп. 5 – 7. Если транслятор не обнаружил ошибок в программе, переходите к следующему пункту, используя для последующих действий объектный модуль, сформированный компилятором (файл *.obj). Выполните компоновку программы, используя редактор связей (компоновщик), имеющийся в вашей системе программирования (например tlink.exe). При обнаружении ошибок компоновки (сообщения о них содержатся в файле *.map) тщательно проанализируйте текст программы, внесите изменения и повторите пп. 5 – 8. При успешном завершении компоновки формируется загрузочный модуль программы (файл *.exe). Запустите турбо-отладчик (td.exe), указав в качестве параметра имя файла с загрузочным модулем программы. Выполните подготовленную вами программу в автоматическом или пошаговом режиме, или в режиме с остановом в контрольных точках. Сравните полученные результаты (в рамке сегмента данных окна CPU или на экране пользователя) с ожидаемыми (в окне Watch). В случае совпадения результатов можно предположить, что программа работает правильно. Выполните повторные прогоны программы при различных комбинациях входных данных. Целью повторных прогонов является проверка работоспособности программы по всем ее ветвям при всевозможных допустимых значениях исходных данных. Если для каждого прогона наблюдается совпадение фактических результатов с ожидаемыми, можно считать, что программа работоспособна. Сформируйте файл протокола, который должен включать: исходный текст программы из окна модулей; текст дизассемблированной программы из рамки программы окна CPU; содержимое рамки сегмента данных окна CPU, в котором размещены исходные данные и результаты; содержимое рамки регистров, флагов и стека окна CPU в контрольных точках, заданных преподавателем; содержимое окна Watch после формирования окончательного результата работы программы; все необходимые комментарии. Оформите отчет по лабораторной работе, который должен включать: титульный лист; задание; описание метода решения задачи; описание входных данных; схему программы; распечатку файла протокола; анализ результатов и ошибок; предложения по совершенствованию программы; выводы. Лабораторная работа считается выполненной, если студентом продемонстрирована работоспособность программы на компьютере и защищен отчет по работе. Лабораторная работа 1 |
1 | 2->2 | 1 |
2 | 3->2 | 2 |
3 | 4->2 | 1 |
4 | 5->2 | 2 |
5 | 6->2 | 1 |
6 | 7->2 | 2 |
7 | 8->2 | 1 |
8 | 9->2 | 2 |
9 | 10->2 | 1 |
10 | 11->2 | 2 |
11 | 12->2 | 1 |
12 | 13->2 | 2 |
13 | 14->2 | 1 |
14 | 15->2 | 2 |
15 | 16->2 | 1 |
16 | 2->2 | 2 |
17 | 2->3 | 1 |
18 | 2->4 | 2 |
19 | 2->5 | 1 |
20 | 2->6 | 2 |
21 | 2->7 | 1 |
22 | 2->8 | 2 |
23 | 2->9 | 1 |
24 | 2->10 | 2 |
25 | 2->11 | 1 |
26 | 2->12 | 2 |
27 | 2->13 | 1 |
28 | 2->14 | 2 |
29 | 2->15 | 1 |
30 | 2->16 | 2 |
Контрольные вопросы
Назовите форматы представления числовых данных в ЭВМ. Охарактеризуйте каждый из них.
Какие способы перевода чисел из одной системы в другую вам известны?
Дайте характеристику выполнения поразрядных логических операций.
Дайте характеристику выполнения операций сдвигов и логических сдвигов.
Лабораторная работа 5
Тема: Процедуры
Цель работы: получение навыков разработки структурной организации ассемблерных программ и ее реализации на основе аппарата процедур, изучение способов организации связи по данным между процедурами.
Лабораторноезадание. Разработать программу вычисления функции y=f(a,b,c,d,e). Значения аргументов a, b, c, d, eдолжны вводиться с клавиатуры ПЭВМ. Значение функции y следует вывести на экран дисплея.
Методические указания. Для ввода-вывода числовых данных использовать следующий формат: ЗнЦЦЦ…Ц, где Ц – цифра (0…9), Зн – знак (+,-). Предусмотреть в программе вывод текста, содержащего вычисляемую функцию и формат аргументов, а также выдачу запроса на ввод каждого аргумента. Вычисление функции и преобразование вводимых и выводимых данных оформить в виде процедур: func – вычисление заданной функции, ascbin – преобразование числа из строки ASCII-кодов в двоичное число,
binasc – преобразование числа, представленного в виде двоичного кода, в строку ASCII кодов.
Передача аргументов между вызывающей и вызываемой процедурами может осуществляться несколькими способами (или их комбинацией):
Способ передачи | Передаются данные | Передаются адреса |
Через регистры | 1 | 2 |
Через сегмент стека | 3 | 4 |
Через сегмент данных | 5 | 6 |
Через сегмент кода | 7* | 8* |
* – Если реализация данного варианта невозможна по объективным причинам (ограничения накладываемые операционной системой и средой разработки), то вариант заменяется на подобный, не указанный в задании.
Варианты заданий. Для каждого варианта указан номер, под которым функция f приведена в описании лабораторной работы №1, способ передачи данных между вызывающей и вызываемой процедурами соответственно для func, ascbin, binasc, а также формат данных (b – байт, w – слово):
№ | f | Вызов/возврат (func) | Вызов/возврат (ascbin) | Вызов/возврат (binasc) | Формат |
1) | 30 | 1/2 | 3/4 | 5/6 | b |
2) | 29 | 2/3 | 4/5 | 6/7 | b |
3) | 28 | 3/4 | 5/6 | 7/8 | b |
4) | 27 | 4/5 | 6/7 | 8/1 | b |
5) | 26 | 5/6 | 7/8 | 1/2 | b |
6) | 25 | 6/7 | 8/1 | 2/3 | b |
7) | 24 | 7/8 | 1/2 | 3/4 | b |
8) | 23 | 2/1 | 6/5 | 4/3 | b |
9) | 22 | 3/2 | 7/6 | 5/4 | w |
10) | 21 | 4/3 | 8/7 | 6/5 | w |
11) | 20 | 5/4 | 1/8 | 7/6 | w |
12) | 19 | 6/5 | 2/1 | 8/7 | w |
13) | 18 | 7/6 | 3/2 | 1/8 | w |
14) | 17 | 8/7 | 4/3 | 2/1 | w |
15) | 16 | 1/8 | 5/4 | 3/2 | w |
16) | 15 | 1/7 | 2/6 | 3/5 | b |
17) | 14 | 2/8 | 3/7 | 4/6 | b |
18) | 13 | 3/1 | 4/8 | 5/7 | b |
19) | 12 | 4/2 | 5/1 | 6/8 | b |
20) | 11 | 5/3 | 6/2 | 7/1 | b |
21) | 10 | 6/4 | 7/3 | 8/2 | b |
22) | 9 | 7/5 | 8/4 | 1/3 | b |
23) | 8 | 8/6 | 1/5 | 2/4 | w |
24) | 7 | 1/6 | 2/5 | 3/4 | w |
25) | 6 | 2/7 | 3/6 | 4/5 | w |
26) | 5 | 3/8 | 4/7 | 5/6 | w |
27) | 4 | 4/1 | 5/8 | 6/7 | w |
28) | 3 | 5/2 | 6/1 | 7/8 | w |
29) | 2 | 6/3 | 7/2 | 8/1 | w |
30) | 1 | 7/4 | 8/3 | 1/2 | w |
Контрольные вопросы
Какие языковые средства используются в ассемблере для определения и вызова процедур?
Какие действия выполняются при вызове процедуры и возврате из процедуры?
Какие существуют способы передачи аргументов и возврата результата при вызове процедуры? Охарактеризуйте каждый из них.
Каково назначение стека при обеспечении взаимодействия между вызывающей и вызываемой процедурами?
Лабораторная работа 6
Тема: Макросы
Цель работы: изучение аппарата макросредств ассемблера и получение навыков разработки и использования макроопределений.
Лабораторноезадание. Разработать программу вычисления таблицы значений функции y=f(a,b,c,d,e) при изменении одного из ее аргументов в соответствии с заданной зависимостью. Обеспечить вывод на экран вида табулируемой функции, значений неизменяемых аргументов и результатов вычислений в виде пар: “значение варьируемого аргумента – значение функции”.
Методические указания. Значения всех аргументов, в том числе и начальное значение варьируемого аргумента, следует задать в программе. Значения варьируемого аргумента, а также соответствующие значения функции должны быть представлены в виде массивов. Составить макросы для каждого поддиапазона изменения индекса i, а также для вычисления значения функции. Вид функции y следует взять из задания к лабораторной работе №1. В программе необходимо использовать макросы общего вида и специальные макросы.
Варианты заданий. Для каждого варианта указана изменяемая переменная (ai, bi, ci, di или ei) как функция индекса i. Вид этой функции различен для разных поддиапазонов изменения индекса i (1..5, 6..10).
№ вар. | Изм-ая перем-я | i=1…5 | i=6…10 |
1 | ai | (i+1)*5 | 2*i-1 |
2 | bi | 8-(i+2) | 3*(i-1) |
3 | ci | (i+3)/i | 4*i2 |
4 | di | i+4*a | 5*i+3 |
5 | ei | i2+5 | 6*i-b |
6 | ai | b*13-i | 7*(i/2) |
7 | bi | i+e*i | 30-8*i |
8 | ci | i+8*a | 9*i+14 |
9 | di | b*i+9 | 10*i |
10 | ei | i*d+10 | 2+11*i |
11 | ai | (i-1)2 | (i+c)/2 |
12 | bi | e2-i | 5+a/3 |
13 | ci | 3*i2 | b*4-i |
14 | di | 1+7*i | (i+1)2 |
15 | ei | 5*(i/3) | 9+(i-7) |
16 | ai | 8*i-c | b2+i |
17 | bi | (d-c)*i | 100-i2 |
18 | ci | (i-a)/4 | 13+2*i |
19 | di | 5*(i/2) | (i+4)*a |
20 | ei | i*c | b*i-11 |
21 | ai | d2-15 | (i-e)*i |
22 | bi | 6*i-a | (i-1)*2 |
23 | ci | b*i-8 | i-5*a |
24 | di | 11*i | e*i-16 |
25 | ei | 7+3*i | i*b+1 |
26 | ai | (i-d)/3 | (i-2)2 |
27 | bi | (5+a)/3 | (e-i)2 |
28 | ci | e*6-i | 4*i2 |
29 | di | (i+b)2 | c+3*i |
30 | ei | 2*(i+1) | (i/2)*4 |
Контрольные вопросы
В чем заключается основное отличие макроса от процедуры?
Поясните механизм макровызова.
Можно ли использовать в программе макроопределение без макровызова?
Лабораторная работа 7
Тема: Гибридная программа Си-Ассемблер
Цель работы: изучение типов вызова функций языка Си и получение навыков разработки ассемблерных программ, вызывающих стандартные функций Си.
Лабораторноезадание. Разработать программу вычисления функции
y = f( a, b, c, d, e). Формат данных – двойное слово.
Методические указания. Значения аргументов a, b, c, d, e ввести с клавиатуры, используя стандартную функцию Си scanf. Результат распечатать на экран используя функцию printf. Вид функции y следует взять из задания к лабораторной работе №1.
Варианты заданий. Для каждого варианта указан номер, под которым функция f приведена в описании лабораторной работы №1.
№ варианта | f | № варианта | f | № варианта | f | № варианта | f | № варианта | f |
1 | 7 | 11 | 17 | 21 | 27 | 31 | 37 | 41 | 2 |
2 | 8 | 12 | 18 | 22 | 28 | 32 | 38 | 42 | 3 |
3 | 9 | 13 | 19 | 23 | 29 | 33 | 39 | 43 | 4 |
4 | 10 | 14 | 20 | 24 | 30 | 34 | 40 | 44 | 5 |
5 | 11 | 15 | 21 | 25 | 31 | 35 | 41 | 45 | 6 |
6 | 12 | 16 | 22 | 26 | 32 | 36 | 42 | | |
7 | 13 | 17 | 23 | 27 | 33 | 37 | 43 | | |
8 | 14 | 18 | 24 | 28 | 34 | 38 | 44 | | |
9 | 15 | 19 | 25 | 29 | 35 | 39 | 45 | | |
10 | 16 | 20 | 26 | 30 | 36 | 40 | 1 | | |
Контрольные вопросы
1. Какие существуют основные типы вызова? Охарактеризуйте их.
2. Какой тип вызова используется для обращения к стандартным функциям языка Си?