Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab5 / report_lr5

.doc
Скачиваний:
10
Добавлен:
10.02.2019
Размер:
79.36 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра МОЭВМ

отчет

по лабораторной работе №5

по дисциплине «Организация ЭВМ и систем»

Тема: «Написание собственного прерывания»

Студент гр. 3303

Преподаватель

Санкт-Петербург

2018

Цель работы.

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

Постановка задачи.

Разработать на языке Ассемблер программу, которая выполняет прерывание 4B.

  • 4 – 1Ch – прерывание от часов, генерируется автоматически операционной системой 18 раз в секунду;

  • B – выдача звукового сигнала.

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

Ход работы.

Была написана программа lab5.asm. Код программы представлен в приложении A. Программа вызывает собственное прерывание от системных часов, вызывающее звуковой сигнал. Далее Программа была перетранслирована и был создан загрузочный модуль.

Программа была успешно протестирована.

Вывод:

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

Приложение А

Код программы lab5.asm

AStack SEGMENT STACK ; стек программы

DW 512 DUP(?) ; выделим 1 Кбайт памяти

AStack ENDS

DATA SEGMENT ; сегмент данных

KEEP_CS DW 0 ; для хранения сегмента

KEEP_IP DW 0 ; для смещения прерывания

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA ,SS:AStack

SOUNG PROC FAR ; новое звуковое прерывание от таймера

PUSH AX ; сохранение изменяемых регистров

cli

mov al, 10110110b

mov dx,43h

out dx, al

mov ax,10CFh ; загружаем частоту звука

dec dx

out dx, al ; последовательно загружаем частоту в выходной порт

mov al, ah

out dx, al

add dx,1Fh

in al, dx; включить динамик

or al, 11b

out dx, al

sti

mov cx,0FFFFh; задержку подбирай сам

a1: loop a1

cli

in al, dx; выключить динамик

and al, 11111100b

out dx, al ; загружаем сигнал в порт

sti

;<действия по обработке прерывания>

POP AX ; восстановление регистров

MOV AL, 20H ; востановление системного прерывания от таймера

OUT 20H,AL

IRET

SOUNG ENDP

Main PROC FAR

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV AH, 35H ; функция получения вектора

MOV AL, 1CH ; номер вектора

INT 21H

MOV KEEP_IP, BX ; запоминание смещение

MOV KEEP_CS, ES ; запоминаем сегмент

PUSH DS

MOV DX, OFFSET SOUNG ; смещение для процедуры в DX

MOV AX, SEG SOUNG ; сегмент процедуры

MOV DS, AX ; помещаем в DS

MOV AH, 25H ; функция установки вектора

MOV AL, 1CH ; номер вектора

INT 21H ; меняем прерывание

POP DS ;сохраняем сегмент данных

mov ah,08h ; вызов прерывания вызывающего системный таймер

int 21h

CLI ; включаем игнорирование внешних прерываний

PUSH DS ; возвращаем сегмент данных

MOV DX, KEEP_IP ;возвращаем смещение

MOV AX, KEEP_CS ;возвращаем сегмент

MOV DS, AX

MOV AH, 25H

MOV AL, 1CH

INT 21H ; восстанавливаем вектор

POP DS

STI ; возвращаем прерывание от внешних устройств

RET

Main ENDP

CODE ENDS

END Main

4

Соседние файлы в папке lab5