Uploaded by An Gor

5эвмпу

advertisement
Министерство высшего образования и науки Российской Федерации
Пензенский государственный университет
Кафедра «Вычислительная техника»
Отчет о выполнении лабораторной работы №5
«Работа процессора при прерываниях»
по дисциплине «ЭВМ и периферийные устройства»
Выполнили: ст.гр.18ВВ2
Горынина А.В.
Алпатова А.А.
Приняли:
Кучин А.В.
Патунин Д.В.
Пенза, 2021
Цель работы:
прерываний.
изучение
особенностей
выполнения
команд
программных
Задание: Составить программу, выполняющую обработку массива, аналогично
заданию предыдущей работы, но вызываемую с использование аппарата
прерываний, параметры передавать через регистры.
Задание лабораторных 3 и 4.Составить программу формирования в ячейке У
результата обработки массива из 8 чисел Х, размещенных в памяти.
Вариант 1. Y=max X
Ход работы
Написали и отладили программу в соответствии с заданием. Алгоритм программы
приведен на рисунке 1.
Начало
Получение старого
значения вектора
прерывания
Сохранение
старого значения
вектора
Запись адреса
подпрограммы в
область векторов
прерываний
Запись аргументов
подпрограммы в
регистры
Вызов
обработчика
прерывания
Восстановление
старого адреса в
области векторов
прерываний
Конец
Рисунок 1 – Алгоритм программы l5.asm
Начало
аx<-первый
элемент массива
сx<-7
si<2
cx=7;cx>0
да
Элемент
массива > ах
нет
ах <- элемент
массива
si <-si+2
cx--
y <- ax
Конец
Рисунок 2 – Алгоритм подпрограммы p1
Листинг программы
Turbo Assembler
l5.asm
Version 2.5
04/30/21 11:58:13
Page 1
1
0000
stseg
segment para stack
2
0000 10*(????)
dw
16
dup(?)
3
0020
stseg ends
4
5
0000
dseg
segment para
6
7
0000 FFDF 0005
0007 FFF7 +
x dw -33, 5, 7, -9, 8, 2, 0, 2
8
0008 0002
0000 0002
9
0010 ????
y dw ?
10
0012 ????
oldAdress
dw
?
11
0014
dseg ends
12
13
0000
cseg
segment para
14
15
16
17
0000
lab5
proc
far
18
assume cs:cseg, ds:dseg, ss:stseg
19
0000 1E
push ds
20
0001 B8 0000
mov ax, 0
21
0004 50
push ax
22
0005 B8 0000s
mov ax, dseg
23
0008 8E D8
mov ds, ax
24
25
000A 06
push ES
26
000B B4 35
mov AH,35H
; вызов функции DOS
для получения
+
27
старого значения вектора прерывания
28
000D B0 FE
mov AL,0FEH
29
000F CD 21
int 21H
30
0011 8C 06 0012r
mov oldAdress,ES ; сохранение старого
значения
+
31
вектора
32
0015 89 1E 0014r
mov oldAdress+2,BX
33
0019 1E
push DS
34
001A BA 0041r
mov DX,offset p1 ; вызов функции
DOS для записи
+
35
адреса пользовательской программы обработки
+
36
прерывания в область векторов прерываний
37
001D B8 0000s
mov AX,seg
p1
38
0020 8E D8
mov DS,AX
39
0022 B4 25
mov AH,25H
40
0024 B0 FE
mov AL,0FEH
41
0026 CD 21
int 21H
42
0028 1F
pop DS
43
44
45
0029 BB 0000r
lea bx,x
46
002C CD FE
int 0FEH ;
вызов прерывания
47
002E 1E
push DS
48
002F 8B 16 0014r
mov DX,oldAdress+2 ; вызов функции
DOS для
+
49
восстановления старого адреса в области
векторов
+
50
прерываний
51
0033 A1 0012r
mov AX,oldAdress
52
53
54
55
56
57
0036
0038
003A
003C
003E
003F
8E
B4
B0
CD
1F
07
Turbo Assembler
l5.asm
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
0040
0041
D8
25
FE
21
mov
mov
mov
int
pop
pop
Version 2.5
04/30/21 11:58:13
CB
Page 2
ret
lab5 endp
0041
p1
0041
0044
0047
004A
004C
004E
0050
0053
A1
B9
BE
39
7E
8B
83
E2
0055
0058
0059
A3 0010r
CF
0000r
0007
0002
00
02
00
C6 02
F5
far
mov ax, x[0]
mov cx,7
mov si,2
cmp [bx+si],ax
jle l2
mov ax, [bx+si]
l2: add si,2
loop l1
mov y, ax
iret
p1
endp
cseg ends
end lab5
Version 2.5
Symbol Name
??DATE
??FILENAME
??TIME
??VERSION
@CPU
@CURSEG
@FILENAME
@WORDSIZE
L1
L2
LAB5
OLDADRESS
P1
X
Y
proc
l1:
0059
Turbo Assembler
Symbol Table
04/30/21 11:58:13
Type
Value
Text
Text
"l5
"04/30/21"
"
"11:58:13"
Text
Number 0205
Text
0101H
Text
CSEG
Text
L5
Text
2
Near
CSEG:004A
Near
CSEG:0050
Far CSEG:0000
Word
DSEG:0012
Far CSEG:0041
Word
DSEG:0000
Word
DSEG:0010
Groups & Segments
CSEG
DSEG
STSEG
DS,AX
AH,25H
AL,0FEH
21H
DS
ES
Bit Size Align
16
16
0059 Para
none
0014 Para
none
16 0020 Para
Combine Class
Stack
Page 3
массив х
y
Рисунок 3 – Результат работы программы, первый пример
Контрольный просчет
x[] : -33, 5, 7, -9, 8, 2, 0, 2 (FFDF, 0005, 0007, FFF7, 0008, 0002, 0000, 0002)
max = 8 (0008)
массив х
y
Рисунок 4 – Результат работы программы, второй пример
Контрольный просчет
x[] : 0, 5, 7, 247, 8, 2, 2816, 2 (0000, 0005, 0007, 00F7, 0008, 0002, 0B00, 0002)
max = 2816 (0B00)
массив х
y
Рисунок 5 – Результат работы программы, третий пример
Контрольный просчет
x[] : -33, -5, -70, -9, -8, -2, -1, -256 (FFDF, FFFB, FFBA, FFF7, FFF8, FFFE, FFFF,
FF00)
max = -1 (FFFF)
Выводы
В ходе выполнения лабораторной работы изучили особенности выполнения
команд программных прерываний.
Download