Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №6.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
117 Кб
Скачать
☆

2. Задание для домашней подготовки.

  1. Повторить команды организации прерываний микропроцессора і8086;

  2. Повторить понятие стека и организация стека для микропроцессора і8086.

  3. Повторить понятие прерывания и организацию системы прерываний в микропроцессоре і8086;

  4. Повторить адресацию операндов в памяти для микропроцессора і8086.

3. Порядок выполнения работы.

  1. Ознакомиться с заданием и проанализировать его.

  2. Составить программу согласно заданию в кодах.

  3. Набрать текст составленной программы в текстовом редакторе отладчика.

  4. Выполнить трансляцию программы (в случае возникновения ошибок исправить их).

  5. Сделать пошаговое выполнение программы и убедиться в правильности ее работы (в случае неправильности внести исправления в алгоритм и текст программы и повторить п.4-5).

  6. Выполнить исследование системы прерываний в микропроцессоре і8086.

  1. Задание по лабораторной работе.

Составить программу, которая вычисляет значение арифметического выражения и обрабатывает заданный массив по указанному правилу (арифметическое выражение взять из Л.р. “Арифметические операции микропроцессора і8086”, обработку массива из Л.р. “ Управляющие логические структуры высокого уровня в микропроцессоре і8086”). Выполнение задачи оформить в виде двух обработчиков прерываний. Для этого задействовать два вектора прерываний 30+№варианта и 31+№варианта. Передачу и возврат параметров осуществить любым удобным способом.

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

5. Содержание отчета

  • Задание по лабораторной работе и исходные данные;

  • Текст программы с комментариями;

  • Краткий обзор команд для работы с системой прерываний микропроцессора і8086;

  • Таблица исследования системы прерываний микропроцессора і8086;

  • Объяснить понятие прерывания;

  • Организация системы прерываний в микропроцессоре і8086;

  • Объяснить действия выполняемые микропроцессором при вызове прерывания и возврате из него.

6. Пример выполнения задания.

Рассмотри вариант 30.

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

Исходный массив:

I

V

a

n

o

v

S

e

r

g

e

y

I

g

o

r

e

v

i

c

h

73

118

97

110

111

118

32

83

101

114

103

101

121

32

73

103

111

114

101

118

105

99

104

Будем использовать вектора 30+30=60 и 31+30=61.

Текст программы с комментариями:

.data

mas db 'Ivanov Sergey Igorevich'

x db ?

y db ?

.code

jmp start

; вычисление арифметического выражения

interup1:

mov ax,75

sub ax,35

mov cl,10

div cl

add al,bl

mov x,al

iret

;/////////////////////////////////////////////////////////////

; обработка массива

interup2:

mov si,0

mov dl,0

mov cx,23

cycle:

test mas[si],00000001b

jnz next

inc dl

next:

inc si

loop cycle

mov y,dl

iret

;/////////////////////////////////////////////////

; инициализация векторов прерываний

initialize proc

mov ax,0

mov es,ax ; настраиваем es на начало памяти

mov bx,60 ; задаем номер вектора

shl bx,1

shl bx,1 ; формируем адрес начала вектора

mov word ptr es:[bx],interup1 ; записываем IP вектора прерывания

mov es:[bx+2],cs ; записываем CS вектора прерываний

; повторяем то же для второго вектора

mov bx,61

shl bx,1

shl bx,1

mov word ptr es:[bx],interup2

mov es:[bx+2],cs

ret

initialize endp

; основная программа

start:

call initialize ; вызываем подпрограмму инициализации векторов прерываний

int 60 ; вызываем обработчик прерывания - вычисление выражения

int 61 ; вызываем обработчик прерывания - обработка массива

nop

end

Исследование механизма прерываний (для этого потребуются некоторые адреса команд)

.data

mas db 'Ivanov Sergey Igorevich'

x db ?

y db ?

.code

jmp start

interup1:

CS:001D mov ax,75

sub ax,35

mov cl,10

div cl

add al,bl

mov x,al

CS:002C iret

;/////////////////////////////////////////////////////////////

interup2:

CS:002D mov si,0

mov dl,0

mov cx,23

cycle:

test mas[si],00000001b

jnz next

inc dl

next:

inc si

loop cycle

mov y,dl

CS:0044 iret

;/////////////////////////////////////////////////

initialize proc

mov ax,0

mov es,ax

mov bx,60

shl bx,1

shl bx,1

mov word ptr es:[bx],interup1

mov es:[bx+2],cs

mov bx,61

shl bx,1

shl bx,1

mov word ptr es:[bx],interup2

mov es:[bx+2],cs

ret

initialize endp

start:

call initialize

CS:006E int 60

CS:0070 int 61

CS:0072 nop

end

Таблица 1. – Таблица векторов

Вектор

Адрес

CS

IP

60

0000:00F0

0100

001D

61

0000:00F4

0100

002D

Таблица 2. – Таблица состояний

Состояние

CS

IP

SP

до int 60

0100

006E

0000

после int 60

0100

001D

FFFA

до iret

0100

002C

FFFA

после iret

0100

0070

0000

до int 61

0100

0070

0000

после int 61

0100

002D

FFFA

до iret

0100

0044

FFFA

после iret

0100

0072

0000