Поиск по базе сайта:
Московский государственный колледж информационных технологий Сборник практических работ Предмет: Ассемблер icon

Московский государственный колледж информационных технологий Сборник практических работ Предмет: Ассемблер




Скачати 239.89 Kb.
НазваМосковский государственный колледж информационных технологий Сборник практических работ Предмет: Ассемблер
Дата конвертації06.01.2013
Розмір239.89 Kb.
ТипПрактическая работа



Московский государственный колледж информационных технологий


Сборник практических работ

Предмет: Ассемблер



по специальности 2201 Вычислительные машины, комплексы, системы и сети


2005 г.



«Рассмотрено»

цикловой комиссией «Программирование»


« ___ » ___________________ 2005 г.


Председатель Н. В. Валиулина



Утверждено

Зам. директора по УМ и ВР


« ___ » _____________________ 2005 г.


И. А. Кумскова


Соответствует государственным тре­бованиям к минимуму содержания и уровню подготовки выпускников по специальности 2201 Вычислительные машины, комплексные системы и сети.


Составитель: Казакова С. В. – преподаватель МГКИТ

^

Перечень практических работ


Практическая работа № 1
Разработка первой программы на Ассемблере

Практическая работа № 2 (4 часа)
Работа с программой DEBUG

Практическая работа № 3
Решение задач на арифметические команды, команды цикла и условного перехода (8 часов)

Практическая работа № 4
Обработка строк

Практическая работа № 5
Написание подпрограмм

Практическая работа № 6
Создание библиотеки на языке Ассемблера

Практическая работа № 7
Макроопределения (4 часа)

Практическая работа № 8
Задачи по программированию операций над файлами, каталогами, дисками

Практическая работа № 9
Работа с клавиатурой и дисплеем через системные средства DOS и BIOS

Практическая работа № 10.
Основы организации резидентных программ.


^

Практическая работа № 1

Тема: Разработка первой программы на Ассемблере.

Задание:


  1. Подготовить и отладить программу (условие задачи и текст программы № 1-1 на Assembler даётся далее. При наборе программы комментарии можно опустить).

  2. Подготовить и отладить программу с аналогичным условием, имеющую два сегмента: сегмент команд и сегмент данных.


Условие задачи:

  1. Программа принимает из внешнего мира бит входной информации. (Внешним миром в данном случае является программист, осуществляя ввод с клавиатуры информацию).

  2. В этой программе два важных свойства: ввод и принятие программой решения. Программа спрашивает: "время за полдень или нет" и принимает с клавиатуры ответ длиной в один символ.

  3. Если введенный ответ представляет собой буквы Y нижнего или верхнего регистров ("Да"), то программа выводит на экран приветствие, соответствующее дневному времени; в противном случае выдается "утреннее" приветствие.

  4. В приведенном примере программы присутствуют все существенные элементы, делающие программу полезной — ввод из внешнего мира, обработка данных и принятие решения.

  5. После запуска программы появится сообщение:

It is after 12 noon (Y/N)? с мигающим курсором, установленным после вопросительного знака. Программа ожидает ввод ответа. Например, нажав на клавишу Y, программа ответит:

Good afternoon, world!
^

Методика выполнения:


  1. Найти на ПК пакет TASM фирмы Borland (Возможный путь: С\DEVELOP\TASM\BIN);

  2. При помощи текстового редактора подготовить исходный текст программы, сохранив в своём каталоге или в каталоге TASM, и присвоив расширение .ASM;

  3. Создать объектный и исполняемый модули

  4. В случае выполнения предыдущих пунктов без ошибок запустить созданный выполнимый файл (расширение .EXE). В результате на экран монитора должна быть выдана строка текста из программы (см. п. 5 выше).



^

Контрольные вопросы:


  1. Понятие регистра.

  2. Отличие директив от команд?

  3. Сколько байт будет отведено в ОП по директиве —
    DB 13,10,'Good morning, world!',13,10,'$'?

  4. Назначение директивы ASSUME?


Программа № 1-1
^

Text segment ‘CODE’ ; (1)

Assume CS:text, DS:text ; (2)


Begin: mov AX, text ; (3)

mov DS, AX ; (4) DS указывает на сегмент данных

mov DX, OFFSET TimeP ;указание на приглашение ввода времени

mov AH, 09h ;функция печати строки DOS

int 21h ;вызов DOS

mov AH, 1 ;функция приема символа DOS

int 21h ;вызов DOS

cmp AL, 'y' ;введен символ y нижнего регистра,

;подтверждающий, что время за полдень?

jz IsAfternoon ;да, время - за полдень

cmp AL, 'Y' ;введен символ Y верхнего регистра,

;подтверждающий, что время за полдень?

jnz IsMorning ;нет, время до полудня

IsAfternoon:

mov DX, OFFSET GoodAfter ;указывает на дневное приветствие

jmp Disp


IsMorning:

mov DX, OFFSET GoodMorn ;указывает на утреннее приветствие


Disp:

mov AH, 09h ;функция печати строки DOS

int 21h ;вызов DOS

mov AX, 4С00h ;функция завершения программы DOS

int 21h ;вызов DOS

;используемые данные

TimeP DB 'Is it after 12 noon (Y/N)?$' ;(уже за полдень (Да/Нет)?)

GoodMorn LABEL BYTE

DB 13,10,'Good morning, world!',13,10,'$' ;(Доброе утро, мир)

GoodAfter LABEL BYTE

DB 13,10,'Good afternoon, world!',13,10,'$' ;(Добрый день, мир)

text ENDS

END begin

Замечание: При вводе исходного текста можно использовать как прописные, так и строчные буквы. Рекомендуется прописными буквами выделять обозначения регистров.
^

Описание программы с одним сегментом


Программа содержит строки – предложения языка ассемблера. Предложение (1) с помощью оператора segment открывает сегмент команд нашей программы. Сегменту даётся произвольное имя text. Описатель ‘code говорит о том, что это сегмент команд. В конце предложения после точки с запятой располагается комментарий.

Любая программа обязательно должна состоять из сегментов. Обычно в программе задаются три сегмента : команд, данных и стека. Пока в нашей программе ограничимся одним.

В предложении (2) с помощью оператора assume сообщаем ассемблеру (программе-транслятору), что сегментные регистры CS и DS будут указывать на один и тот же сегмент text. В сегментные регистры заносятся начальные адреса закреплённых за ними сегментов. В программе в регистр CS адрес начала сегмента будет загружен автоматически, а в регистр DS адрес придётся загружать «вручную».

Предложения (1) и (2) программы служат для передачи служебной информации программе ассемблера. В состав выполнимой программы, состоящей из машинных кодов, эти строки не попадут, т. к. процессору, выполняющему программу, они не нужны.

Предложение (3), начинающееся с метки begin, является первой выполнимой строкой программы. Для того, чтобы процессор знал, с какой строки начать выполнять программу после её загрузки в память, начальная метка программы указывается в качестве операнда самого последнего оператора программы end (последнее предложение). Начиная от точки входа программа выполняется строка за строкой точно в том порядке, в каком эти строки написаны программистом.

В предложениях (3) и (4) выполняется инициализация сегментного регистра DS. Сначала значение имени text (т. е. адрес сегмента text) загружается командой mov в регистр общего назначения процессора AX , а затем из регистра AX переносится в регистр DS. Такая двухступенчатая операция нужна из-за некоторых архитектурных особенностей процессора.

Последующие предложения реализуют существо программы – вывод на экран строки текста. Делается это не непосредственно, а путем обращения к служебным программам ОС
MS-DOS, т. к. в составе команд процессора и, соответственно, операторов языка ассемблера нет команд вывода данных на экран.

Для того, чтобы обратиться к DOS, надо загрузить в регистр общего назначения AH номер требуемой функции, а в другие регистры – исходные данные для выполнения этой функции, после чего выполнить команду int 21 h, которая передаст управление DOS. Вывод на экран строки текста можно осуществить функцией 09h, которая требует, чтобы в регистре DX содержался адрес выводимой строки. Адрес строки загружается в регистр DX , а затем осуществляется вызов DOS.

После того, как DOS выполнит затребованные действия, в данном случае выведет строку с текстом, выполнение программы продолжится. Далее DOS должна выполнить некоторые служебные действия: освободить занимаемую нашей программой память, вызвать системную программу, которая выведет на экран запрос DOS и будет ждать следующей команды оператора. Все эти действия выполняет функция DOS с номером 4Ch.


После последнего выполнимого предложения программы можно описывать используемые в ней данные (в нашей задаче – строка текста). Текстовые данные вводят в программу с помощью директивы ассемблера db и заключают в апострофы. Текст выводится до символа $.

Директива text ends указывает ассемблеру, что сегмент text закончился.

Последняя строка программы содержит директиву end, которая говорит программе ассемблера, что закончился весь текст программы, и больше ничего транслировать не нужно. В качестве операнда этой директивы, как уже отмечалось, обычно указывается точка входа в программу,
т. е. адрес первой выполнимой программной строки.


^ Описание программы с двумя сегментами

Программа с двумя сегментами отличается от программы с одним сегментом лишь несколькими деталями (хотя её структура отличается радикально). Вслед за сегментом команд должен быть введён отдельный сегмент данных с произвольным именем, например, data. Должны измениться предложения (2) и (3). Теперь в регистр DS необходимо ввести адрес сегмента данных data, а не сегмента команд text.

Оттранслировав, скомпоновав и выполнив программу, можно будет заметить, что результат этой программы в точности такой же, что и в первой. Введение отдельного сегмента данных повысило наглядность программы. Другие отличия в работе программ будут рассмотрены при дальнейшей работе.


Содержание отчета:

  1. Ответы на контрольные вопросы.

  2. Текст программ (с полными комментариями к каждому предложению).

  3. Привести общую схему процесса разработки программы на языке Assembler на примере программы практической работы.

  4. Записать в отчет, какие бывают категории сообщений об ошибках.


Практическая работа № 2

Работа в Turbo Debugger (4 часа)

Задание:


  1. Изучение работы команд PUSH, POP (2 часа)

    1. Подготовить и отладить программу № 2-1, использующую команды MOV, POP и PUSH.

    2. Загрузить полученную программу в Turbo Debugger.

    3. Войти в режим пошагового выполнения программы.

  2. Изучение работы логических команд и команд сдвига (2 часа)

    1. Определить сегмент данных следующим образом:
      A DB 0
      S DW 0AВh
      W DW 0CFh
      Op DB 0AАh

    2. Применить логические команды к переменным — S , W.

    3. Применить все команды сдвига к переменной Op.

    4. Записать в отчет значения регистров до и после применения логических команд и команд сдвига.

  3. Самостоятельная разработка программы

    1. Подготовить и отладить программу (возможны индивидуальные задания):
      Условие задачи: с помощью команд работы со стеком скопировать четырёхбайтовую таблицу в другую в обратном порядке, например: исходная таблица — 10, 20, 30, 40;
      таблица-приемник — 40, 30, 20, 10.

    2. Результат просмотреть в окне просмотра отладчика.


Контрольные вопросы:

  1. Определение понятия - стек.

  2. Как осуществляется порядок выборки содержащихся в стеке данных?

  3. Как определить адрес доступной ячейки стека?

  4. Где в Turbo Debug можно посмотреть содержимое стека?

  5. Дан сегмент данных: A DW 5

B DW -5

Как с помощью команд работы со стеком поменять содержимое ячеек памяти? Зарисовать содержимое стека до и после проделанных действий.

  1. Перечислить логические команды и привести примеры их работы.

  2. Перечислить команды сдвига, привести примеры их работы. Основное назначение команд сдвига.



Содержание отчёта:

  1. Ответы на контрольные вопросы.

  2. Тексты отлаженных программ с полными комментариями.

  3. Изобразить содержимое стека для каждой команды работы со стеком для программы № 2-1.

Например — подробная схема организации стека по шагам:



6301




Стек не заполнен. PUSH AХ

  1. Для программы, в которой используются логические команды, записать содержимое регистров после действия каждой команды.

Программа № 2-1

(Программа содержит некоторые ошибки, которые необходимо исправить).

.MODEL smoll

.STACK 256

.DATA

speed DB 99

.CODE

BEGIN:

mov ax data

mov ds, ax

mov ah, [speed] ; Загрузить значение speed в AH

mov SI, offset speed ; Загрузить адрес speed в SI

PVSH AX

PUSH SI

mou AX, -1

mov BX, -2

push AX

push BX

pop CX

pop DX

pop ax

pop bx

Exit:

mov ah,04ch

mov AL, OOh

int 2 1h

END Start


Практическая работа № 3 (8 часов)

Решение задач на арифметические команды,

команды цикла и условного перехода

Задание:

  1. ^
    Команды целочисленного вычитания с займом (2 часа)

    1. Подготовить и отладить программу, которая осуществляет вычитание 32-разрядных чисел:
      В сегменте данных —
      N1 DW 000Ah ; младшая часть вычитаемого,
      N2 DW 0001h ; старшая часть вычитаемого,

      В сегменте команд —
      MOV AX,0 ; младшая часть уменьшаемого,
      MOV BX,0002 ; старшая часть уменьшаемого.

  2. Использование команд для арифметических операций с двойной точностью.

    1. Подготовить и отладить программу, обеспечивающую выполнение задания в соответствии с вариантом (таблица 3-1).

    2. Результат определить в ячейки памяти и просмотреть в Окне просмотра.
  3. ^
    Подсчет количества заданных чисел в массиве

    1. Подготовить и отладить программу, обеспечивающую выполнение задания в соответствии с вариантом (таблица 3-2).

      ^ Условие задачи: С помощью директивы <имя> DB зарезервировать 10 байт данных в ОП
      в соответствии с вариантом (таблица 3-2).
      Подсчитать: а) количество чисел, которые = 0, б) количество чисел, меньших 0Ah.
      Результат расположить в двух ячейках памяти.

    2. Загрузить полученную программу в Turbo Debugger.

    3. Поместить переменные в окно просмотра.

    4. Программу выполнить по шагам для просмотра работы и записи результата

  1. Нахождение максимального элемента массива

    1. Подготовить и отладить программу обеспечивающую выполнение задания :

      ^ Условие задачи: С помощью директивы <имя> DB зарезервировать 10 байт данных в ОП в соответствии с вариантом (таблица 3-2).
      Найти максимальное значение. Результат расположить в ячейке памяти с именем — MAX.
      Найти номер максимального элемента в массиве и поместить его в ячейку с именем — NOM.

    2. Загрузить полученную программу в Turbo Debugger.

    3. Поместить переменные в окно просмотра.

    4. Программу выполнить по шагам для просмотра работы и записи результата в отчет.

    5. Работу программ продемонстрировать преподавателю.

.


Контрольные вопросы (части I – II):

  1. Работа команд вычитания? Примеры.

  2. Число представлено в двоичной системе счисления — 11111001. Представить это число в
    10 системе счисления как беззнаковое и как знаковое.

  3. Заполнить таблицу:



Числа (2 с/с)

Беззнаковые числа (10 с/с)

Знаковые числа (10 с/с)

11111100

+00000101

00000001

???

+ ?

???

???

+ ?

???




  1. Различаются ли операции сложения и вычитания для знаковых и беззнаковых чисел с точки зрения их аппаратной реализации?

  2. Записать, как происходит сложение двух чисел, размером в двойное слово, побитно и в виде фрагмента программы: A = 12049003h, B = 8052300Fh.


Контрольные вопросы (части III – IV):

  1. Работа команд INC, DEC.

  2. Работа команды JMP.

  3. Что означает переход по условию "выше-ниже", "больше-меньше"?

  4. Предположив, что регистры АХ и ВХ содержат знаковые данные, а регистры СХ и DХ беззнаковые, записать команды CMP и команды условного перехода для следующих проверок:

  • Значение в DX больше, чем в СХ?

  • Значение в ВХ равно значению в АХ?

  • Значение в АХ меньше или равно значению в ВХ?

  1. Описать действие следующей последовательности команд

^ START: MOV CX,3

SUB AX,10

LOOP START

  1. Работа команды LEA (изучить самостоятельно).

  2. Объяснить результат действия следующих команд?

MOV BX, OFFSET Table+4

LEA BX, Table+4

Содержание отчёта:

  1. Ответы на контрольные вопросы.

  2. Отлаженные варианты программ с подробными комментариями к каждому предложению.

  3. Ответы на вопросы, поставленные в ходе выполнения работы.
В А Р И А Н Т Ы З А Д А Н И Я (таблица 3-1)






Выражение

Данные

1

REZ = A1 + A2 + A3

A1 = adf12345h

A2 = aaah

A3 = fadc0987h

2

REZ = A1 - A2 + A3

A1 = adf12345h

A2 = aaaah

A3 = fadc0987h

3

REZ = A1 + A2 - A3

A1 = adf12345h

A2 = aah

A3 = fadc0987h

4

REZ = A1 - A2 - A3

A1 = adf12345h

A2 = aaah

A3 = fadc0987h

5

REZ = A1 + A2 + A3

A1 = adf12345h

A2 = 111aaah

A3 = fadc0987h

6

REZ = A1 + A2 + A3

A1 = adf12345h

A2 = aaah

A3 = dc0987h

7

REZ = A1 - A2 - A3

A1 = 1

A2 = aaah

A3 = fadc0987h

8

REZ = A1 - A2 - A3

A1 = 1

A2 = f0000aaah

A3 = fadc0987h

9

REZ = A1 - A2 - A3

A1 = 12h

A2 = 12aaah

A3 = fadc0987h

10

REZ = A1 - A2 - A3

A1 = 123h

A2 = 33aaah

A3 = fadc0987h

11

REZ = A1 - A2 - A3

A1 = 1

A2 = ah

A3 = fadc0987h

12

REZ = A1 - A2 - A3

A1 = 1

A2 = aaaah

A3 = fadc096h



В А Р И А Н Т Ы З А Д А Н И Я (таблица 3-2)




  1. Массив чисел: 1,4,6,12h,0Bh,3,2,6,0,16h.

  2. Массив чисел: 5,9,1Ah,2,4,0,11h,1,5,8.

  3. Массив чисел: 4,0,1,11h,2,6,5,9,0Dh,0.

  4. Массив чисел: 4,3,11h,1,5,0,3,1Ah,6.0.

  5. Массив чисел: 5,11h,12h,0,5,0,4,0,0Bh,2.

  6. Массив чисел: 0,4,4,0,0,2,4,1Ah,1Bh,1.

  7. Массив чисел: 1,2,11h,3,0,0,4,1,0Ah,1.

  8. Массив чисел: 0,0,0,1,2,3,4,5,6,7.

  9. Массив чисел: 1,11h,3,4,0,6,12h,0,0,0.

  10. Массив чисел: 0,0,1,15h,3,4,0,0,12h,11h.

  11. Массив чисел: 0Bh,0Ch,0Ah,11h,12h,0,0,0,0Bh,0Ah.

  12. Массив чисел: 12h,0,11h,0,11h,0,11h,0,1,2.

  13. Массив чисел: 0,0,0,0,0,0Bh,0Ah,0Ah,0,0.

  14. Массив чисел: 5,4,3,2,1,0,0Ah,0,0,0Ch.

  15. Массив чисел: 0,1,0,1,0,1,0,0Ah,0Bh,0.

  16. Массив чисел: 7,7,0Аh,3,7,0Ah,2,01Bh,9,10.

  17. Массив чисел: 3,4,5,0Bh,3,4,5,0Ah,6,6.

  18. Массив чисел: 0Ah,0Ch,1,1,1,0,0Dh,1,2,5.

  19. Массив чисел: 5,5,0Ch,3,4,5,0Bh,3,4,0Ch.

  20. Массив чисел: 17,6,5,0Dh,4,5,6,0Fh,9,0.


Практическая работа № 4

Обработка строк

Задание:


  1. Обработка строк байтов или слов

    1. Подготовить и отладить программу в соответствии с вариантом.
      Варианты заданий:

      1. Переслать символьную строку STR1, состоящую из 15-20 байтов, в другое место памяти (в строку STR2) и вывести строку STR2 на экран.

      2. Произвести сравнение двух строк. Предполагается, что в буфер TEXT поступают строки исходного текста программы. Сравнение происходит с искомой строкой «Привет». В случае совпадения строк — вывести об этом сообщение на экран; аналогично, в случае несовпадения строк — вывести об этом сообщение на экран. Провести тестирование программы, вводя разные строки в буфер TEXT.

      3. В заданной строке STR1 выполнить поиск заданного символа (например: точки, запятой, пробела или вопросительного знака). На экран вывести сообщение — найден заданный символ или нет.

      4. Переслать строку STR1, состоящую из 5 – 10 байтов, включив её в состав другой, более длинной строки STR2. Вывести полученную строку STR2 на экран.

      5. Отсканировать строку STR1 длиной в 10 слов в поисках первого ненулевого элемента. Если такой элемент обнаружен, то обнулить найденный элемент и следующие за ним три элемента. Провести тестирование программы, вводя ненулевой элемент в начале,
        в середине и в конце строки. Полученную строку вывести на экран.

  2. Управление экраном с помощью ESC-последовательностей

    1. Модифицировать текст программы, отлаженной ранее, включив в него
      Esc-последовательности управления экраном, например: очистка экрана, задание
      цвета (красный по белому, коричневый по зеленому, …), позиционирование курсора.

Контрольные вопросы:

  1. Что выполняет следующая последовательность команд:
    MOV CX, 500
    ^ REP MOVS DEST, SOURCE
    DEST и SOURCE – строки.

  2. Назначение флага DF. С помощью каких команд можно управлять состоянием флага DF? Описать действие этих команд.

  3. Даны два фрагмента:

CLD
MOV CX, 100
^ REPE CMPS DEST, SOURCE

CLD
MOV CX, 100
REPNE CMPS DEST, SOURCE

В чем различие в действии данных фрагментов?

  1. Назначение команд сканирования строк. Необходимые условия для сканирования.

Содержание отчёта

  1. Ответы на контрольные вопросы.

  2. Тексты отлаженных программ с подробными комментариями.

Практическая работа № 5

Написание подпрограмм

Задание:


I. Вывод на экран дисплея результата работы программы при помощи процедуры.

  1. Для выполнения данной практической работы необходимо восстановить и
    отладить программу – Подсчет количества чисел, равных 0, в массиве из 10 чисел (см. практическую работу № 3).

  2. Получить объектный файл программы № 5-1.

  3. Отладив программу подсчета количества чисел, равных 0, сделать изменения в ней:

    1. Директивой EXTRN MAS10:proc — объявить имя внешней процедуры;

    2. Вставить команду загрузки результата в регистр CL;

    3. Вставить команду CALL MAS10 — вызов подпрограммы.

  4. Оттранслировать новый вариант программы, получить второй объектный файл.

  5. При помощи команды TLINK скомпоновать объектные файлы программы № 5-1 и модифицированной программы подсчета чисел, равных 0, в исполняемую программу.

  6. Запустить полученный загрузочный модуль. При правильной работе на экран будет выведен результат – сколько нулей в массиве.

Замечание: возможны самостоятельные решения данной задачи: вывода на экран результата – подсчёта количества чисел в массиве, равных 0, используя подпрограммы. Одновременно можно подсчитать и количество чисел, меньших 0Ah.


II. Выделение из программы блока обработки массива в отдельную процедуру.

  1. Для выполнения данной части практической работы необходимо воспользоваться отлаженной программой подсчёта в массиве чисел, равных 0 (исходная программа первой части).

  2. Модифицировать исходную программу, создав две программы – главную и подпрограмму. Подпрограмма должна содержать блок обработки массива (поиск элементов, равных 0). Передачу параметров осуществить через стек.

  3. Далее осуществить действия, аналогичные пп. 4-6 предыдущей части.

Замечание 1: можно объединить решение задачи частей I и II. В этом случае, имея главную программу и две процедуры, будет выведено на экран, сколько нулей имеется в исходном массиве
(а также, количества чисел, меньших 0Ah).


Замечание 2: согласовав с преподавателем, можно часть II практической работы выполнить в упрощенном варианте.
^ Упрощенное задание:
Вывести строку текста на экран. Вывод строки оформить через процедуру. Передачу параметров осуществить: а) через регистры, б) через стек. Для усложнения задачи можно в главной программе в зависимости от вводимого символа 1 или 2 выводить одну или две строки на экран.


Контрольные вопросы:

  1. Что означает тип объединения PUBLIC?

  2. Какие существуют другие типы объединений? Их назначение.

  3. Назначение директивы EXTRN.

  4. Назначение директивы PUBLIC.

  5. Подробно разобрать в отчете, как происходит передача параметров через стек?

Содержание отчета:

  1. Ответы на контрольные вопросы.

  2. Листинги программ с описанием предложений программ.


Программа № 5-1

Model small

.code

public MAS10 ;объявление «общим » имени процедуры

MAS10 proc ;процедура вывода на экран чисел от 0 до 10

;данные передаются через регистр CL

push AX

push DX ;сохранение значения регистров в стеке

mov DH, CL ;сохранение переданных данных

mov AH, 02h ;функция DOS – «вывод символа»

mov DL, 09h ;код символа табуляции

int 21h

sub DH, 09

cmp DH, 01 ;проверка на =10

jb M2 ;если больше 10, то на «выход»

jne M1 ;если не равно 10, то «переход»

mov DL, 31h ;если равно 10, то «вывод» 1

int 21h

mov DL, 30h ;Вывод 0

int 21h

jmp M2

M1: mov DL, 30h ;преобразование в ASCII код

Add DL, CL

Int 21h ;вывод чисел от 0 до 9

M2: pop DX

Pop AX ;восстановление содержимого регистров

RET ;возврат в вызывающую программу

MAS10 endp ;конец процедуры

end

^ Практическая работа № 6

Создание библиотеки на языке Ассемблера

Задание:


  1. Создание объектной библиотеки пользователя.

  1. Оформить подпрограммы из предыдущей практической работы в виде отдельных исходных файлов (дав им различающиеся имена),оттранслировать их и получить объектные модули.

  2. С помощью программы-библиотекаря TLIB.EXE создать объектную библиотеку пользователя и включить в нее объектные модули процедур-подпрограмм.

  3. Вывести на экран и приложить в отчет распечатку содержимого библиотеки.

  4. Скомпоновать главную программу с модулями из объектной библиотеки, проверить её работоспособность и продемонстрировать преподавателю.

  5. Выделить из библиотеки одну их подпрограмм обратно в виде объектного файла. Процесс отразить в отчёте.

II. Создание подпрограмм.

  1. Для программы, полученной в предыдущей работе (часть I), написать
    подпрограмму, выводящую на экран текстовое сообщение. Подпрограмму оттранслировать
    в виде отдельного модуля с блоком данных, размещаемых в отдельном сегменте памяти.
    Замечание: а) текстовая строка должна быть помещена в сегменте данных с именем,
    не совпадающим с сегментом данных вызывающей программы; б) директивой PUBLIC объявить процедуру внешней. Тип процедуры должен быть FAR.


  2. Полученный объектный модуль включить в личную библиотеку.

  3. Убедиться в правильной работе программ и продемонстрировать работу программ преподавателю.


Контрольные вопросы:

  1. Что необходимо сделать, чтобы программный модуль имел свой независимый сегмент данных?

  2. Привести в отчёте 4 разновидности команды вызова подпрограмм CALL. Рассмотреть структуру программных комплексов с подпрограммами. Привести пояснения.

  3. Как в библиотеке объектных модулей заменить один из модулей на его новую версию?


Содержание отчёта:

  1. Ответы на контрольные вопросы.

  2. Тексты отлаженных программ с пояснениями.

  3. Распечатка содержимого библиотеки.



Практическая работа № 7 (4 часа)

Макроопределения

Задание:


  1. Для любой программы из предыдущих практических работ (без использования процедур) создать макроопределения, заменив требуемые фрагменты программ и внеся необходимые изменения в основную программу.

  2. Отладить программу, получив исполняемый файл и убедившись в его работоспособности.

  3. Сравнить объемы и компактность программ (исходной и с макровызовами).

  4. Создать библиотеку макроопределений (библиотека должна иметь не менее трех макроопределений). Например: окончание счета программы (стандартный выход), вывод строки символов, ввод символов, сохранение содержимого регистров в стеке, другие.

  5. Модифицировать исходную программу, включив обращения к макроопределениям из макробиблиотеки, отладить программу, убедиться в ее работоспособности.


Контрольные вопросы:

  1. Привести состав макроопределений (три части).

  2. Способы использования макроопределений. Недостатки и преимущества того или иного способа.

  3. Назначение директивы LOCAL .

  4. Как считать библиотеку макроопределений в исходную программу?


Содержание отчета:

  1. Ответы на контрольные вопросы.

  2. Тексты программ с подробными комментариями.

Практическая работа № 8

Задачи по программированию операций над файлами,

каталогами, дисками

Задание:


  1. Подготовить и отладить программы:

    1. В текущем каталоге диска создать файл с произвольным именем и записать в него какую-либо символьную строку. После выполнения программы проверить его наличие на диске. Просмотреть его содержимое.

    2. Прочитать содержимое созданного файла в память и вывести его на экран.

    3. Прочитать 6 байтов из созданного ранее файла, начиная с третьего байта. Вывести их на экран.

    4. Добавить символьную строку к концу созданного символьного файла. Просмотреть содержимое исправленного файла.

    5. Создать в текущем каталоге подкаталог с произвольным именем.

    6. Создать в текущем каталоге подкаталог и удалить созданный подкаталог из п. 1.5.


Контрольные вопросы:

  1. Способы выполнения операций с файлами.

  2. Объяснить понятие дескриптора файла.

  3. Что необходимо сделать с файлом, прежде чем его использовать в программе? Какая функция предназначена для этого?

  4. С помощью каких функций можно создать файл?

  5. Какая функция закрывает файл? Что её может заменить в программе?

Содержание отчёта:

  1. Ответы на контрольные вопросы.

  2. Тексты программ с подробными комментариями.


Практическая работа № 9

Работа с клавиатурой и дисплеем через
системные средства DOS и BIOS

Задание:


Замечание №1: на данную практическую работу студент должен прийти с составленным алгоритмом программы, имея текст программы в напечатанном виде или в электронном виде.

Замечание №2: по согласованию с преподавателем возможны незначительные изменения варианта задания.

  1. Отладить программу, подготовленную заранее (домашняя подготовка).
    Программа обеспечивает ввод строки символов с клавиатуры и вывод на дисплей с условиями, оговоренными в соответствии с вариантом задания.

  2. Объяснить работу программы.

  3. Модифицировать программу по требованию преподавателя с объяснением своих действий.

Варианты заданий:

  1. Вывод на дисплей символов через пробел.

  2. Вывод на дисплей строки сверху вниз (в колонку).

  3. Вывод на дисплей символов с мерцанием.

  4. Фон на дисплее — голубой.

  5. Символы на дисплее — красного цвета.

  6. Вывод на дисплей с преобразованием строчных букв в прописные.

  7. Вывод на дисплей каждого символа должен сопровождаться звуковым сигналом.

  8. Вывод на дисплей символов в верхнюю строку.

  9. Программа должна запрашивать разрешение на отображение строки.

  10. Ввод только цифр, все остальные символы должны вызывать повторный запрос ввода.

  11. Если первый символ строки – цифра, то цвет выводимой строки – синий.

  12. Строка символов отображается на дисплее в обратном порядке.

  13. Прием с клавиатуры всех символов в режиме «с. эхо», вывод на дисплей только цифр.

  14. Ввод с клавиатуры в режиме «с. эхо», вывод только нечетных символов.

  15. Ввод последовательно двух строк символов, вывод строк на дисплей должен происходить только в том случае, если первые три символа в строках совпадают.

  16. Вывод строки символов на дисплей без пробелов.

  17. Вывод строки символов на дисплей в рамке.

  18. Если введено меньше пяти символов, то при выводе в конце вводимой строки добавляется символ «?».

  19. Вывод на дисплей строки символов по диагонали экрана.

  20. Строка символов повторяется на экране дисплея, причем каждая последующая строка короче на один символ предыдущей.


Контрольные вопросы:

  1. Что подразумевает каждый из трёх уровней программирования на языке Ассемблера?

  2. Объяснить назначение и работу команды INT «№».

  3. Почему процедуры обработки прерываний объединяются в группы? Как называются такие процедуры? Как их различать?

  4. Какие способы ввода данных с клавиатуры предоставляет операционная система?

  5. Какие возможности вывода текстовой информации на экран предоставляет операционная система?

  6. Какие средства вывода на экран предоставляет BIOS?

  7. Написать в отчёте все системные функции, которые использовались в программе,
    с подробным описанием назначения и действия данных функций.



Содержание отчета:

  1. Ответы на контрольные вопросы.

  2. Тексты программ с подробными комментариями (обязательное требование).

Практическая работа № 10

Основы организации резидентных программ

Задание:


  1. Оформить свой вариант программы (предыдущая практическая работа) в виде .COM файла.

  2. Проверить работоспособность.

  3. Сравнить размеры .EXE и .COM файлов своей программы.

  4. .COM файл сделать резидентным (модифицированным программам не забывать давать разные имена, сохраняя все предыдущие программы).

  5. Вызвать резидентную программу.

  6. При помощи утилиты DOS MEM.EXE определить размер свободной памяти ДО и ПОСЛЕ загрузки резидентной программы.

  7. Убедиться в работоспособности программ.


Контрольные вопросы:

  1. В чем различие .COM и .EXE файлов? Когда используется формат .COM?

  2. Назначение префикса программного сегмента (PSP).

  3. Как в .COM программах резервируется место под префикс?

  4. Какая программа называется резидентной?

  5. Зачем нужен блок инициализации в резидентной программе?


Содержание отчета:

  1. Ответы на контрольные вопросы.

  2. Тексты программ с подробными комментариями.

  3. Размер .COM и .EXE файлов

  4. Размер памяти, занимаемый резидентной программой.







Схожі:




База даних захищена авторським правом ©lib.exdat.com
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації