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

8

Министерство образования Российской Федерации

УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра технической кибернетики

Лабораторная работа № 5

Программирование операций ввода-вывода

Выполнил:

студент гр.

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

Мукасеева В. Н.

Уфа 2005

Лабораторная работа № 5

Программирование операций ввода-вывода

1. ЦЕЛЬ РАБОТЫ

Целью работы является закрепление лекционного материала по командам прерывания на языке ассемблера и приобретение практических навыков использования этих команд в программах с операциями ввода-вывода.

2. ХОД РАБОТЫ

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

2.1 Задание 1

2.1.1 Исходный текст программы

STACKSEG SEGMENT PARA PUBLIC 'STACK'

DB 64 DUP(0)

STACKSEG ENDS

DSEG SEGMENT PARA PUBLIC 'DATA'

MATRIX Dw -12, -50, -40, -35, -12

Dw -41, 400, -620, -177, -10

Dw -50, 120, -120, -55, 400

Dw -24, -10, -40, 100, -55

Dw 400, -10, -50, 400, 12

ROWLEN DW 10

SHOWMAX DB 'Первый максимальный элемент находится в столбце $'

SHOWROW DB ' и в строке $'

SHOWEQU DB ' и равен: $'

MAXINDEXROW DW 0

MAXINDEXCOL DW 0

DELITEL DB 100

TEN DB 10

TWO DB 2

MAX DW 0

DSEG ENDS

CSEG SEGMENT PARA PUBLIC 'CODE'

ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG

OUR_PROG PROC FAR

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSEG

MOV DS,AX

MOV CX,5

LEA BX,MATRIX

MOV AX,MATRIX[BX]

MOV MAX,AX

OUTERLOOP:

PUSH CX

MOV CX,5

MOV SI,0

INSIDELOOP:

MOV AX,MATRIX[BX+SI]

CMP AX,MAX

JLE LESS

MOV MAX,AX

MOV MAXINDEXCOL,SI

MOV MAXINDEXROW,BX

LESS: ADD SI,2

LOOP INSIDELOOP

POP CX

ADD BX,ROWLEN

LOOP OUTERLOOP

LEA DX,SHOWMAX

MOV AH,9H

INT 21H

MOV AX,MAXINDEXCOL

DIV TWO

MOV DL,AL

ADD DL,31H

MOV AH,2H

INT 21H

LEA DX,SHOWROW

MOV AH,9H

INT 21H

MOV AX,0

MOV AX,MAXINDEXROW

DIV TEN

MOV DL,AL

ADD DL,31H

MOV AH,2H

INT 21H

LEA DX,SHOWEQU

MOV AH,9H

INT 21H

CMP MAX,0

JGE POSSUM

NEG MAX

MOV DL,'-'

MOV AH,2H

INT 21H

POSSUM:MOV AX,MAX

MOV CX,3

CYCLEOUT:

DIV DELITEL

MOV BL,AH

MOV DL,AL

ADD DL,30H

MOV AH,2H

INT 21H

MOV AX,0

MOV AL,DELITEL

DIV TEN

MOV DELITEL,AL

MOV AL,BL

LOOP CYCLEOUT

RET

OUR_PROG ENDP

CSEG ENDS

END OUR_PROG

2.1.2 Блок-схема программы

да

НЕТ

2.1.3 Листинг трансляции

Turbo Assembler Version 4.1 09/12/05 21:18:18 Page 1

prog.asm

1 0000 STACKSEG SEGMENT PARA PUBLIC 'STACK'

2 0000 40*(00) DB 64 DUP(0)

3 0040 STACKSEG ENDS

4

5 0000 DSEG SEGMENT PARA PUBLIC 'DATA'

6 0000 FFF4 FFCE FFD8 FFDD + MATRIX Dw -12, -50, -40, -35, -12

7 FFF4

8 000A FFD7 0190 FD94 FF4F + Dw -41, 400, -620, -177, -10

9 FFF6

10 0014 FFCE 0078 FF88 FFC9 + Dw -50, 120, -120, -55, 400

11 0190

12 001E FFE8 FFF6 FFD8 0064 + Dw -24, -10, -40, 100, -55

13 FFC9

14 0028 0190 FFF6 FFCE 0190 + Dw 400, -10, -50, 400, 12

15 000C

16 0032 000A ROWLEN DW 10

17 0034 8F A5 E0 A2 EB A9 20+ SHOWMAX DB 'ЏҐаўл© ¬ ЄбЁ¬ «м­л© н«Ґ¬Ґ­в ­ е®¤Ёвбп ў бв®«ЎжҐ $'

18 AC A0 AA E1 A8 AC A0+

19 AB EC AD EB A9 20 ED+

20 AB A5 AC A5 AD E2 20+

21 AD A0 E5 AE A4 A8 E2+

22 E1 EF 20 A2 20 E1 E2+

23 AE AB A1 E6 A5 20 24

24 0065 20 A8 20 A2 20 E1 E2+ SHOWROW DB ' Ё ў бва®ЄҐ $'

25 E0 AE AA A5 20 24

26 0072 20 A8 20 E0 A0 A2 A5+ SHOWEQU DB ' Ё а ўҐ­: $'

27 AD 3A 20 24

28 007D 0000 MAXINDEXROW DW 0

29 007F 0000 MAXINDEXCOL DW 0

30 0081 64 DELITEL DB 100

31 0082 0A TEN DB 10

32 0083 02 TWO DB 2

33 0084 0000 MAX DW 0

34 0086 DSEG ENDS

35

36

37 0000 CSEG SEGMENT PARA PUBLIC 'CODE'

38 ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG

39 0000 OUR_PROG PROC FAR

40

41 0000 1E PUSH DS

42 0001 2B C0 SUB AX,AX

43 0003 50 PUSH AX

44 0004 B8 0000s MOV AX,DSEG

45 0007 8E D8 MOV DS,AX

46 0009 B9 0005 MOV CX,5

47 000C BB 0000r LEA BX,MATRIX

48 000F 8B 87 0000r MOV AX,MATRIX[BX]

49 0013 A3 0084r MOV MAX,AX

50 0016 OUTERLOOP:

51 0016 51 PUSH CX

52 0017 B9 0005 MOV CX,5

53 001A BE 0000 MOV SI,0

54 001D INSIDELOOP:

55 001D 8B 80 0000r MOV AX,MATRIX[BX+SI]

56 0021 3B 06 0084r CMP AX,MAX

57 0025 7E 0B JLE LESS

Turbo Assembler Version 4.1 09/12/05 21:18:18 Page 2

prog.asm

58 0027 A3 0084r MOV MAX,AX

59 002A 89 36 007Fr MOV MAXINDEXCOL,SI

60 002E 89 1E 007Dr MOV MAXINDEXROW,BX

61 0032 83 C6 02 LESS: ADD SI,2

62 0035 E2 E6 LOOP INSIDELOOP

63 0037 59 POP CX

64 0038 03 1E 0032r ADD BX,ROWLEN

65 003C E2 D8 LOOP OUTERLOOP

66 003E BA 0034r LEA DX,SHOWMAX

67 0041 B4 09 MOV AH,9H

68 0043 CD 21 INT 21H

69 0045 A1 007Fr MOV AX,MAXINDEXCOL

70 0048 F6 36 0083r DIV TWO

71 004C 8A D0 MOV DL,AL

72 004E 80 C2 31 ADD DL,31H

73 0051 B4 02 MOV AH,2H

74 0053 CD 21 INT 21H

75 0055 BA 0065r LEA DX,SHOWROW

76 0058 B4 09 MOV AH,9H

77 005A CD 21 INT 21H

78 005C B8 0000 MOV AX,0

79 005F A1 007Dr MOV AX,MAXINDEXROW

80 0062 F6 36 0082r DIV TEN

81 0066 8A D0 MOV DL,AL

82 0068 80 C2 31 ADD DL,31H

83 006B B4 02 MOV AH,2H

84 006D CD 21 INT 21H

85 006F BA 0072r LEA DX,SHOWEQU

86 0072 B4 09 MOV AH,9H

87 0074 CD 21 INT 21H

88 0076 83 3E 0084r 00 CMP MAX,0

89 007B 7D 0A JGE POSSUM

90 007D F7 1E 0084r NEG MAX

91 0081 B2 2D MOV DL,'-'

92 0083 B4 02 MOV AH,2H

93 0085 CD 21 INT 21H

94 0087 A1 0084r POSSUM:MOV AX,MAX

95 008A B9 0003 MOV CX,3

96 008D CYCLEOUT:

97 008D F6 36 0081r DIV DELITEL

98 0091 8A DC MOV BL,AH

99 0093 8A D0 MOV DL,AL

100 0095 80 C2 30 ADD DL,30H

101 0098 B4 02 MOV AH,2H

102 009A CD 21 INT 21H

103 009C B8 0000 MOV AX,0

104 009F A0 0081r MOV AL,DELITEL

105 00A2 F6 36 0082r DIV TEN

106 00A6 A2 0081r MOV DELITEL,AL

107 00A9 8A C3 MOV AL,BL

108 00AB E2 E0 LOOP CYCLEOUT

109 00AD CB RET

110 00AE OUR_PROG ENDP

111 00AE CSEG ENDS

112 END OUR_PROG

Turbo Assembler Version 4.1 09/12/05 21:18:18 Page 3

Symbol Table

Symbol Name Type Value

??DATE Text "09/12/05"

??FILENAME Text "prog "

??TIME Text "21:18:18"

??VERSION Number 040A

@CPU Text 0101H

@CURSEG Text CSEG

@FILENAME Text PROG

@WORDSIZE Text 2

CYCLEOUT Near CSEG:008D

DELITEL Byte DSEG:0081

INSIDELOOP Near CSEG:001D

LESS Near CSEG:0032

MATRIX Word DSEG:0000

MAX Word DSEG:0084

MAXINDEXCOL Word DSEG:007F

MAXINDEXROW Word DSEG:007D

OUR_PROG Far CSEG:0000

OUTERLOOP Near CSEG:0016

POSSUM Near CSEG:0087

ROWLEN Word DSEG:0032

SHOWEQU Byte DSEG:0072

SHOWMAX Byte DSEG:0034

SHOWROW Byte DSEG:0065

TEN Byte DSEG:0082

TWO Byte DSEG:0083

Groups & Segments Bit Size Align Combine Class

CSEG 16 00AE Para Public CODE

DSEG 16 0086 Para Public DATA

STACKSEG 16 0040 Para Public STACK

Вывод: В ходе лабораторной работы приобрели навыки написания программ с использованием прерываний в операциях ввода/ввода.

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