
лабораторная работа / лабораторные работы по ASSAMBLER / лаб6
.docМинистерство образования и науки Российской Федерации
Курский Государственный Технический Университет
Кафедра ПО ВТ
ЛАБОРАТОРНАЯ РАБОТА №6
НАПИСАНИЕ СОБСТВЕННОГО ПРЕРЫВАНИЯ
выполнил: студент гр. ПО-42
Эсауленко Д.В.
проверил: Родионов Д. И.
Курск 2007
Цель лабораторной работы
Познакомиться с понятиями «Прерывание DOS, прерывание BIOS». Научиться работать с таблицей векторов прерываний. Научиться писать собственные и редактировать существующие (стандартные ) прерывания.
Задание
На вектор 66h «повесить» собственное прерывание такое, чтобы функция с номером 0 этого прерывания осущесвляла ввод для лабораторной работы №5, а функция с номером 1 – вывод.
Листинг программы
Turbo Assembler Version 3.1 04/05/07 22:00:07 Page 1
6.asm
1 .286
2
3 0000 .model small
4
5 0000 .stack 512
6
7 0000 .data
8
9 0000 64*(??) s1 db 100 dup(?)
10 0064 08*(??) s db 8 dup (?)
11 006C 0000 lenS dw 0
12 006E 0000 posS dw 0
13 0070 0000 curPos dw 0
14 0072 0000 count dw 0
15 0074 ???? mn dw ?
16 0076 ???? del dw ?
17 0078 ???? num dw ?
18
19 007A 04*(????) mas dw 4 dup(?)
20 0082 04*(????) dw 4 dup(?) ; вводимый массив
21 008A 04*(????) dw 4 dup(?)
22 0092 04*(????) dw 4 dup(?)
23
24 009A 0004 rowCount dw 4
25 009C 0004 colCount dw 4
26 009E ???? max dw ?
27 00A0 04*(????) maxRow dw 4 dup(?)
28 00A8 04*(????) maxCol dw 4 dup(?)
29 00B0 56 76 65 64 69 74 65+ vvod_mas db 'Vvedite massiv : $'
30 20 6D 61 73 73 69 76+
31 20 3A 20 24
32 00C2 6D 61 78 20 65 6C 65+ vivod_mas1 db 'max elements in rows : $'
33 6D 65 6E 74 73 20 69+
34 6E 20 72 6F 77 73 20+
35 3A 20 24
36 00DA 6D 61 78 20 65 6C 65+ vivod_mas2 db 'max elements in columns : $'
37 6D 65 6E 74 73 20 69+
38 6E 20 63 6F 6C 75 6D+
39 6E 73 20 3A 20 24
40
41 00F5 .code
42 0000 B8 0000s mov AX,@data
43 0003 8E D8 mov DS,AX
44
45 0005 E8 02CE call InPr
46
47 0008 B4 00 mov AH,0
48 000A CD 66 int 66h
49
50 000C E8 0126 call RowMax
51
52 000F B4 09 mov AH,9
53 0011 BA 00C2r lea DX,vivod_mas1
54 0014 CD 21 int 21h
55
56 0016 BB 00A0r mov BX,offset maxRow
57
58 0019 B4 01 mov AH,1
59 001B CD 66 int 66h
60
61 001D E8 0166 call ColMax
62
63 0020 B4 09 mov AH,9
64 0022 BA 00DAr lea DX,vivod_mas2
65 0025 CD 21 int 21h
66
67 0027 BB 00A8r mov BX,offset maxCol
68
69 002A B4 01 mov AH,1
70 002C CD 66 int 66h
71
72 002E B4 01 mov AH,1
73 0030 CD 21 int 21h
74
75 0032 B8 4C00 mov AX,4c00h
76 0035 CD 21 int 21h
77
78 ;***********************************************************************************
79
80 0037 Vvod proc near
81 0037 B4 09 mov AH,9
82 0039 BA 00B0r lea DX,vvod_mas
83 003C CD 21 int 21h
84
85 003E B9 0064 mov CX,100
86 0041 BA 0000r lea DX,s1
87 0044 B4 3F mov AH,3Fh
88 0046 B3 00 mov BL,0
89 0048 CD 21 int 21h
90
91 004A E8 0092 call SetMas
92 004D C3 ret
93 004E Vvod endp
94
95
;***********************************************************************************
392
393 0270 Vivod proc near
394 0270 C6 06 0000r 0D mov s1[0],0Dh
395 0275 8B 0E 009Cr mov CX,colCount
396 0279 BF 0000 mov DI,0
397 027C MasV:
398 027C 51 push CX
399 027D 8B 01 mov AX,[BX][DI]
400 027F A3 0078r mov num,AX
401 0282 57 push DI
402 0283 53 push BX
403 0284 E8 FF50 call IntToStr
404 0287 E8 FFA6 call InsertSubStr
405 028A BB 0000r mov BX,offset s1
406 028D E8 FDBE call LengthStr
407 0290 8B 36 006Cr mov SI,lenS
408 0294 C6 84 FFFFr 20 mov s1[SI-1],' '
409 0299 5B pop BX
410 029A 5F pop DI
411 029B 83 C7 02 add DI,2
412 029E 59 pop CX
413 029F E2 DB loop MasV
414
415 02A1 BB 0000r mov BX,offset s1
416 02A4 E8 FDA7 call LengthStr
417 02A7 8B 36 006Cr mov SI,lenS
418 02AB C6 84 FFFFr 0D mov s1[SI-1],0Dh
419 02B0 C6 84 0000r 0A mov s1[SI],0Ah
420 02B5 C6 84 0001r 24 mov s1[SI+1],'$'
421
422 02BA B4 09 mov AH,9
423 02BC BA 0000r lea DX,s1
424 02BF CD 21 int 21h
425 02C1 C3 ret
426 02C2 Vivod endp
427 ;***********************************************************************************
428
429 02C2 Pr proc near
430 02C2 80 FC 00 cmp AH,0
431 02C5 74 05 je f0
432 02C7 80 FC 01 cmp AH,1
433 02CA 74 06 je f1
434 02CC f0:
435 02CC E8 FD68 call Vvod
436 02CF EB 04 90 jmp exit
437 02D2 f1:
438 02D2 E8 FF9B call Vivod
439 02D5 exit:
440 02D5 CF iret
441 02D6 Pr endp
442
443 ;***********************************************************************************
444
445 02D6 InPr proc near
446 02D6 1E push DS
447 02D7 0E push CS
448 02D8 1F pop DS
449 02D9 BA 02C2r mov DX,offset Pr
450 02DC B4 25 mov AH,25h
451 02DE B0 66 mov AL,66h
452 02E0 CD 21 int 21h
453 02E2 1F pop DS
454 02E3 C3 ret
455 02E4 InPr endp
456
457 ;***********************************************************************************
458
459 end
Turbo Assembler Version 3.1 04/05/07 22:00:07 Page 10
Symbol Table
Symbol Name Type Value
??DATE Text "04/05/07"
??FILENAME Text "6 "
??TIME Text "22:00:07"
??VERSION Number 030A
@32BIT Text 0
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0707H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text 6
@INTERFACE Text 00H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
BREAK1 Near _TEXT:0185
BREAK2 Near _TEXT:01D6
C1 Near _TEXT:0057
C2 Near _TEXT:007D
C3 Near _TEXT:00A3
COL Near _TEXT:00EE
COLCOUNT Word DGROUP:009C
COLMAX Near _TEXT:0186
COPY Near _TEXT:00C8
COPYSTR Near _TEXT:00BD
COUNT Word DGROUP:0072
CURPOS Word DGROUP:0070
DEL Word DGROUP:0076
ENDC1 Near _TEXT:0067
ENDC3 Near _TEXT:00B8
ENDM2 Near _TEXT:022B
EXIT Near _TEXT:02D5
F0 Near _TEXT:02CC
F1 Near _TEXT:02D2
INPR Near _TEXT:02D6
INSERT Near _TEXT:0258
INSERTSUBSTR Near _TEXT:0230
INTTOSTR Near _TEXT:01D7
LENGTHSTR Near _TEXT:004E
LENS Word DGROUP:006C
M1 Near _TEXT:01E3
M2 Near _TEXT:021F
MAS Word DGROUP:007A
MASV Near _TEXT:027C
MAX Word DGROUP:009E
MAXCOL Word DGROUP:00A8
MAXROW Word DGROUP:00A0
MET1 Near _TEXT:013E
MET2 Near _TEXT:0153
MET3 Near _TEXT:018F
MET4 Near _TEXT:01A4
MN Word DGROUP:0074
NEWCOUNTMAX Near _TEXT:01B1
NEWROWMAX Near _TEXT:0160
NEXT1 Near _TEXT:0167
NEXT2 Near _TEXT:01B8
NOTZERO Near _TEXT:021C
NUM Word DGROUP:0078
POSS Word DGROUP:006E
POSSPACE Near _TEXT:009F
PR Near _TEXT:02C2
ROW Near _TEXT:00F5
ROWCOUNT Word DGROUP:009A
ROWMAX Near _TEXT:0135
S Byte DGROUP:0064
S1 Byte DGROUP:0000
SETMAS Near _TEXT:00DF
STRTOINT Near _TEXT:0068
VIVOD Near _TEXT:0270
VIVOD_MAS1 Byte DGROUP:00C2
VIVOD_MAS2 Byte DGROUP:00DA
VVOD Near _TEXT:0037
VVOD_MAS Byte DGROUP:00B0
Groups & Segments Bit Size Align Combine Class
DGROUP Group
STACK 16 0200 Para Stack STACK
_DATA 16 00F5 Word Public DATA
_TEXT 16 02E4 Word Public CODE