Методическое руководство к курсовой работе по дисциплине Assembler ibm pc содержание

Вид материалаРуководство

Содержание


Endp init
END resident ;Конец программы/точка входа
Proc main
Endp main
Методический материал к выполнению курсовой работы подготовил доцент
Программы, использующие мультиплексное прерывание 2Fh, могут работать в оболочке FAR, или непосредственно в сеансе MS-DOS.
Подобный материал:
1   2   3   4   5   6   7   8   9
^

Endp init


;Поля данных в нерезидентной части программы

msg1 db 'Резидентный обработчик установлен $'

msg2 db 'Попытка вторичной установки. Установка отменена $'

msg3 db 'Программа выгружена из памяти $'

command db 'off'
^

END resident ;Конец программы/точка входа



;Prg8. Тестовая программа для исследования работы prg7

;Программа использует функции DOS на стеке ввода/вывода в двух режимах.

;F1- режим попеременного вывода в бесконечном цикле двух строк функцией 09h в одно и то же

;место экрана. Смена символов в строке означает правильную её работу, F10- выход из режима и

;программы. F2- режим ввода c клавиатуры одиночных символов функцией 01h. F10- выход из

;режима и программы. Переход из одного режима в другой возможен через перезапуск программы.

Ideal

Model tiny

Codeseg

org 100h
^

Proc main


;Очистка экрана

mov ah,6 ;Функция инициализации окна или его очистка

mov al,0

mov bh,0Fh ;Атрибут; ярко-белый по чёрному

mov cx,0 ;Левый верхний угол

mov dx,184Fh ;Правый нижний угол

int 10h

;Выбор режима работы; F1- режим вывода строк, F2- режим ввода одиночных символов, F10-

;выход из программы

again: mov ah,08h ;Функция ввода одиночного символа без эха

int 21h ;Первый вызов DOS

cmp al,0 ;Расширенный ASCII код?

jne again ;Нет

mov ah,08h ;Да, введём старший байт

int 21h ;Повторный вызов DOS

cmp al,3Bh ;Нажата F1?

je F1 ;Да

cmp al,3Ch ;Нажата F2?

je F2 ;Да

jmp again ;Нажато незапланированное

;Попеременный вывод в бесконечном цикле двух строк на одно и то же место экрана. Смена ;символов в строке означает правильную работу. F10 –выход из программы

;Установим позицию курсора функцией BIOS 02h

F1: mov ah,02h ;Функция BIOS установки курсора

mov bh,0 ;Страница

mov dh,05h ;Строка (из 25)

mov dl,0h ;Столбец (из 80)

int 10h

;Цикл вывода

continual_1: mov ah,09h ;Вывод первой строки

mov dx,offset str1

int 21h

call check_cycle ;Проверка условия нахождения в цикле вывода

jnc F10 ;CF=0, Выходим из цикла

call delay ;Задержка

mov ah,09h ;Вывод второй строки

mov dx,offset str2

int 21h

call check_cycle ;Проверка условия нахождения в цикле вывода

jnc F10 ;CF=0, выходим из цикла

call delay ;Задержка

jmp continual_1 ;Продолжим

;Процедура задержки delay

Proc delay

mov cx,1000

L2: push cx

xor cx,cx

L1: loop L1 ;Внутренний цикл задержки

pop cx

loop L2 ;Внешний цикл задержки

ret

Endp delay

;Процедура проверки условий продолжения цикла. Если CF=0 - продолжаем, при CF=1 - выходим

;(была нажата клавиша F10)

Proc check_cycle

mov ah,06h ;Функция ввода. Если функция обнаружила в буфере

;клавиатуры символ, то возвращает ZF=0 и в AL код символа. В противном случае устанавливает

;ZF=1 и продолжает программу

mov dl,0FFh ;Режим ввода

int 21h

jnz M1 ;ZF=0, произведём анализ введённого символа

M2: stc ;Установим CF=1, как признак продолжения цикла

jmp ex1

M1: cmp al,0 ;Расширенный ASCII-код

jne M2 ;Нет, продолжим текущий цикл

mov ah,06h ;Введём второй байт

mov dl,0FFh ;Режим ввода

int 21h

cmp al,44h ;Клавиша F10?

jne M2 ;Нет, продолжим текущий цикл

cl ;CF=0, признак выхода из цикла

ex1: ret

Endp check_cycle

;Цикл ввода одиночных символов функцией DOS 01h. Выход из программы – F10.

;Установим позицию курсора функцией BIOS 02h

F2: mov ah,02h ;Функция BIOS установки курсора

mov bh,0 ;Страница

mov dh,07h ;Строка (из 25)

mov dl,0h ;Столбец (из 80)

int 10h

;Ввод с клавиатуры одиночных символов функцией DOS 01h с эхом

continual_2: mov ah,01h

int 21h

cmp al,0 ;Расширенный ASCII-код?

jne continual_2 ;Нет, повторим ввод

mov ah,08h ;Повторный вызов функции DOS для ввода

int 21h ;старшего байта

cmp al,44h ;F10?

jne continual_2 ;Нет, продолжим цикл

F10: mov ax,4C00h ;Выход в DOS

int 21h
^

Endp main


;Поля данных вывода

str1 DB 40 DUP('*'),13,'$'

str2 DB 40 DUP('&'),13,'$'

End main ;Конец программы/точка входа


Комментарий к исследованию резидентной программы Prq7. При взведённом флаге требования на обработку task_request (функция аппаратного обработчика 09h, активизируемого клавишной комбинацией Alt-A) исполнение процедуры task по выводу времени на экран монитора осуществляется:
  • Прикладным обработчиком new_28h, когда компьютер не занят исполнением никакой программы и управление передано командному процессору Command.com.
  • Прикладным обработчиком таймера new_08h – в первом режиме работы тестовой задачи, посвящённом попеременному выводу строк на экран функцией DOS 09h.
  • Прикладным обработчиком new_28h – во втором режиме работы тестовой задачи при вводе одиночных символов с клавиатуры функцией DOS 01h.

12. Индивидуальные задания на проектирование

1 – 12 варианты.

Тестовая программа инициирует три числовых буфера (допустим num1, num2 и result), вводит последовательно в первые два буфера числа в десятичной (или в 16-теричной) системе счисления с последующим переходом в режим ожидания нажатия специальной комбинации клавиш, которая должна активизировать резидентную программу для выполнения вычислительной процедуры с введёнными числами. Тип вычислительной процедуры (а, следовательно, и вариант задания КР) определяется вариантами задания лабораторной работы № 2. Результат вычисления, полученный резидентной программой, помещается в буфер result, откуда и выводится тестовой программой на экран монитора.

Вводимые и выводимые числа в программах ограничены диапазоном соответствующих вычислительных процедур из лабораторной работы № 2.

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

14. Разработать тестовую задачу с прикладным обработчиком new_09h, осуществляющего вывод на экран, после каждого нажатия произвольной клавиши, содержимое порта 60h контроллера клавиатуры, слово статуса флагов клавиатуры и первых 4-х байтов кольцевого буфера клавиатуры. Выход из программы по истечению обработки 40 клавиш.

15. Разработать резидентную программу с прикладным обработчиком new_09h клавиатуры. Программа осуществляет вывод на экран код нажатия и отпускания для произвольной клавиши. Выход из программы по истечению обработки 40 клавиш.

16. Разработать резидентную программу с прикладным обработчиком new_09h от клавиатуры. Программа осуществляет вывод на экран скан-код и ASCII- код для произвольной клавиши. Выход из программы по истечению обработки 40 клавиш.

17. Разработать резидентную программу динамического дампа регистров общего назначения, активизируемую через вектор 03h. Содержимое регистров выводится на экран в 16 - теричном коде. Демонстрацию программы провести на основе одной из ваших программ лабораторного практикума.

18. Разработать резидентную программу динамического дампа сегментных регистров регистра флагов и программного счётчика, активизируемую через вектор 03h. Содержимое регистров выводится на экран в 16 - теричном коде. Демонстрацию программы провести на основе одной из ваших программ лабораторного практикума.

19. Разработать резидентную программу динамического дампа памяти данных тестовой задачи. Вывод данных осуществляется в формате Turbo Debugger, соответствующем команде внутреннего меню окна дампа Alt+F10 > Display as > Byte. Резидент активизируется через пользовательский вектор.

20. Разработать прикладной обработчик new_01h пошагового выполнения программы. Содержательная часть обработчика должна выводить на экран содержимое всех регистров РОН после исполнения каждой команды для той части программы, для которой флаг TF=1. Покомандное исполнение реализуется клавишей F8. Демонстрацию программы провести на основе одной из ваших программ лабораторного практикума.

21. Разработать прикладной обработчик new_01h пошагового выполнения программы. Содержательная часть обработчика должна выводить на экран содержимое дампа памяти в формате Turbo Debugger после исполнения каждой команды для той части программы, для которой флаг TF=1. Покомандное исполнение реализуется клавишей F8. Демонстрацию программы провести на основе одной из ваших программ лабораторного практикума.

22. Некоторая тестовая задача выводит на экран текущее время из КМОП – часов и, добавляя к нему 30 секунд, устанавливает будильник. Срабатывание будильника активизирует резидентную программу, которая выводит на экран приветственное сообщение и короткий звонок (одноголосая мелодия).

23. Некоторая тестовая задача выводит на экран текущее время из КМОП – часов и, добавляя к нему 30 секунд, устанавливает будильник. Срабатывание будильника активизирует резидентную программу, которая воспроизводит фрагмент мелодичного перезвона (последовательность сигналов для нот какой-либо октавы).

24. Разработать резидентную программу, выводящую на экран монитора (правый верхний угол) текущее время из КМОП – часов с интервалом в 1 сек. Каждый вывод времени вызывается активизацией прикладного обработчика от будильника new_4Ch. Вывод производится способом прямой записи в видеопамять.

Требования к оформлению курсовой работы.
  1. Курсовая работа должна иметь титульный лист и состоять из 12 – 15 листов печатного текста шрифтом, равный 12 пунктам.
  2. Содержание КР включает следующие обязательные параграфы (разделы):
  • Задание.
  • Структура программы и обоснование выбора её отдельных модулей (составных обработчиков прерываний) должна учитывать следующие факторы:

– Вычислительные процедуры, используемые в программе, должны соответствовать заданному алгоритму реализации;

– Резидентная программы должна быть защищена от повторной установки и давать возможность выгрузки её из памяти;

– Прикладной аппаратный обработчик прерываний должны строится с учётом свойства нереентерабельности DOS;

– Программа должна работать с хорошо продуманным экранным интерфейсом.
  • Справочное описание используемых в программе системных обработчиков, сервисных функций DOS и BIOS.
  • Листинг программы.
  • Функциональное описание программы и результаты её демонстрации.
  1. Необходимые компьютерные файлы на дискете для демонстрации программы

13. Литература,

в которой в той или иной степени рассматриваются вопросы, связанные с выполнением курсовой работы.

1. Финогенов К.Г. Самоучитель по системным функциям MS-DOS.- Изд.2,-М.: Радио и связь, Энтроп, 1995.-382 с., илл.

2. Сван Т. Освоение Turbo Assembler. - Киев: Диалектика,1996. - 544 с., ил.

3. Финогенов К.Г. Основы языка Ассемблера. -М.: Радио и связь, 1999. - 288 с.: ил.

4. Зубков С.В. Assembler. Для DOS, Windows и Unix.-М.: ДМК, 1999..- 640 с., ил.

5. Assembler /В. Юров. - СПб: Издательство «Питер», 2000. -624 с.: ил.

6. Юров В. Assembler: Специальный справочник. СПб: Питер, 2000.

7. Пирогов В.Ю. Assembler. Учебный курс. - М.: "Нолидж", 2001.-848с.

8. Финогенов К.Г. Рудаков П.И. Язык ассемблера: уроки программирования. - М.: ДИАЛОГ-МИФИ, 2001. - 640с.

9. Афанасьев В.А. Cайт кафедры ВТ НГТУ: http:/ermak.cs.nstu.ru
  • Методическое пособие к лабораторному практикуму по языку Assembler IBM PC.
  • Методическое руководство к выполнению курсовой работы языку Assembler IBM PC.

^ Методический материал к выполнению курсовой работы подготовил доцент

кафедры ВТ НГТУ В.А. Афанасьев.

Март, 2002г.

1 Если прикладной обработчик new_09h содержит внутри себя собственную процедуру обработки информации, (например, с именем task) то перед выполнением данной процедуры необходимо позаботиться о разрешении прерываний для таймера, «оконтурив» процедуру task командами sti и cli.

2Перед запуском тестовой программы проверьте, имеется ли у вас строка в файле config.sys:

Device=C:\WIN98\COMMAND\ANSI.SYS

или что-нибудь подобное, отражающее путь в вашем компьютере к драйверу MS-DOS - ANSI.SYS

3 ^ Программы, использующие мультиплексное прерывание 2Fh, могут работать в оболочке FAR, или непосредственно в сеансе MS-DOS.

4 Для просмотра окружения программы загрузите её отладчик Turbo Debugger, откройте окно CPU, перейдите в окно дампа памяти и с помощью команды Goto в открывшемся окне установите адрес DS:002Ch. В окне дампа по этому адресу откроется содержимое PSP, начиная с адреса 2Сh. Запомните значение сегментного адреса (обозначим его SegSetting), записанного по указанному выше адресу и, вновь воспользовавшись командой Goto, установите адрес SegSetting:0000h.

5В программе FAR, написанной с использованием API - функций Windows, а не функций DOS, разрушение системы не произойдёт (во всяком случае, это не происходило при проведении указанного эксперимента на моём компьютере с ОС Windows 98).