Министерство высшего образования и науки Российской Федерации Пензенский государственный университет Кафедра «Вычислительная техника» Отчет о выполнении лабораторной работы №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) Выводы В ходе выполнения лабораторной работы изучили особенности выполнения команд программных прерываний.