Препод Мукасеева В. Н. 3-й семестр / LAB 4 / отчет по 4
.docМинистерство образования Российской Федерации
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра технической кибернетики
Лабораторная работа № 4
Арифметические операции целочисленной обработки информации
Выполнил:
студент гр.
Проверила преподаватель:
Мукасеева В. Н.
Уфа 2005
Лабораторная работа № 4
Арифметические операции целочисленной обработки информации
1. ЦЕЛЬ РАБОТЫ
Целью работы является закрепление лекционного материала по командам арифметических операций на языке ассемблера и приобретение практических навыков реализации вычислительных алгоритмов.
2. ХОД РАБОТЫ
1)Создать двумерный массив 5х5 двухбайтовых переменных, заполнить его положительными, отрицательными и нулевыми значениями. Найти сумму по столбцам и определить, какая из них максимальная. Выдать значение этой суммы и номер столбца.
2.1 Решение
2.1.1 Исходный код программы
STACKSEG SEGMENT PARA PUBLIC 'STACK'
DB 64 DUP(0)
STACKSEG ENDS
DSEG SEGMENT PARA PUBLIC 'DATA'
MATRIX Dw 0, -2, 0, -3, -12
Dw -41, -555, -620, -177, 10
Dw 50, 2, 0, -5, -445
Dw -24, 0, -4, -1, 5
Dw -400, 1, -5, - 1, -11
ROWLEN DW 10
SHOWMAX DB 'Максимальная сумма элементов в столбце номер $'
SHOWIS DB ' и равна :$'
MAXSUM DW 0
MAXCOL DW 0
DELITEL DB 100
TEN DB 10
TWO DB 2
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 SI,0
MOV CX,5
OUTERLOOP:
PUSH CX
LEA BX,MATRIX
MOV CX,5
MOV AX,0
INSIDELOOP:
ADD AX,MATRIX[BX+SI]
ADD BX,ROWLEN
LOOP INSIDELOOP
POP CX
CMP CX,5
JNE NOTFIRSTITER
MOV MAXSUM,AX
MOV MAXCOL,SI
JMP LESS
NOTFIRSTITER:CMP AX,MAXSUM
JLE LESS
MOV MAXSUM,AX
MOV MAXCOL,SI
LESS:
ADD SI,2
LOOP OUTERLOOP
MOV AX,MAXCOL
DIV TWO
MOV BL,AL
LEA DX,SHOWMAX
MOV AH,9H
INT 21H
MOV DL,BL
ADD DL,31H
MOV AH,2H
INT 21H
LEA DX,SHOWIS
MOV AH,9H
INT 21H
CMP MAXSUM,0
JGE POSSUM
NEG MAXSUM
MOV DL,'-'
MOV AH,2H
INT 21H
POSSUM:MOV AX,MAXSUM
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 17:18:17 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 0000 FFFE 0000 FFFD + MATRIX Dw 0, -2, 0, -3, -12
7 FFF4
8 000A FFD7 FDD5 FD94 FF4F + Dw -41, -555, -620, -177, 10
9 000A
10 0014 0032 0002 0000 FFFB + Dw 50, 2, 0, -5, -445
11 FE43
12 001E FFE8 0000 FFFC FFFF + Dw -24, 0, -4, -1, 5
13 0005
14 0028 FE70 0001 FFFB FFFF + Dw -400, 1, -5, -1, -11
15 FFF5
16 0032 000A ROWLEN DW 10
17 0034 8C A0 AA E1 A8 AC A0+ SHOWMAX DB 'Њ ЄбЁ¬ «м п б㬬 н«Ґ¬Ґв®ў ў бв®«ЎжҐ ®¬Ґа $'
18 AB EC AD A0 EF 20 E1+
19 E3 AC AC A0 20 20 ED+
20 AB A5 AC A5 AD E2 AE+
21 A2 20 A2 20 E1 E2 AE+
22 AB A1 E6 A5 20 20 AD+
23 AE AC A5 E0 20 24
24 0064 20 A8 20 E0 A0 A2 AD+ SHOWIS DB ' Ё а ў :$'
25 A0 20 3A 24
26 006F 0000 MAXSUM DW 0
27 0071 0000 MAXCOL DW 0
28 0073 64 DELITEL DB 100
29 0074 0A TEN DB 10
30 0075 02 TWO DB 2
31 0076 DSEG ENDS
32
33
34 0000 CSEG SEGMENT PARA PUBLIC 'CODE'
35 ASSUME CS:CSEG, DS:DSEG, SS:STACKSEG
36 0000 OUR_PROG PROC FAR
37
38 0000 1E PUSH DS
39 0001 2B C0 SUB AX,AX
40 0003 50 PUSH AX
41 0004 B8 0000s MOV AX,DSEG
42 0007 8E D8 MOV DS,AX
43 0009 BE 0000 MOV SI,0
44 000C B9 0005 MOV CX,5
45 000F OUTERLOOP:
46 000F 51 PUSH CX
47 0010 BB 0000r LEA BX,MATRIX
48 0013 B9 0005 MOV CX,5
49 0016 B8 0000 MOV AX,0
50 0019 INSIDELOOP:
51 0019 03 80 0000r ADD AX,MATRIX[BX+SI]
52 001D 03 1E 0032r ADD BX,ROWLEN
53 0021 E2 F6 LOOP INSIDELOOP
54 0023 59 POP CX
55 0024 83 F9 05 CMP CX,5
56 0027 75 0A JNE NOTFIRSTITER
57 0029 A3 006Fr MOV MAXSUM,AX
Turbo Assembler Version 4.1 09/12/05 17:18:17 Page 2
prog.asm
58 002C 89 36 0071r MOV MAXCOL,SI
59 0030 EB 0E 90 JMP LESS
60 0033 3B 06 006Fr NOTFIRSTITER:CMP AX,MAXSUM
61 0037 7E 07 JLE LESS
62 0039 A3 006Fr MOV MAXSUM,AX
63 003C 89 36 0071r MOV MAXCOL,SI
64 0040 LESS:
65 0040 83 C6 02 ADD SI,2
66 0043 E2 CA LOOP OUTERLOOP
67 0045 A1 0071r MOV AX,MAXCOL
68 0048 F6 36 0075r DIV TWO
69 004C 8A D8 MOV BL,AL
70 004E BA 0034r LEA DX,SHOWMAX
71 0051 B4 09 MOV AH,9H
72 0053 CD 21 INT 21H
73 0055 8A D3 MOV DL,BL
74 0057 80 C2 31 ADD DL,31H
75 005A B4 02 MOV AH,2H
76 005C CD 21 INT 21H
77 005E BA 0064r LEA DX,SHOWIS
78 0061 B4 09 MOV AH,9H
79 0063 CD 21 INT 21H
80 0065 83 3E 006Fr 00 CMP MAXSUM,0
81 006A 7D 0A JGE POSSUM
82 006C F7 1E 006Fr NEG MAXSUM
83 0070 B2 2D MOV DL,'-'
84 0072 B4 02 MOV AH,2H
85 0074 CD 21 INT 21H
86 0076 A1 006Fr POSSUM:MOV AX,MAXSUM
87 0079 B9 0003 MOV CX,3
88 007C CYCLEOUT:
89 007C F6 36 0073r DIV DELITEL
90 0080 8A DC MOV BL,AH
91 0082 8A D0 MOV DL,AL
92 0084 80 C2 30 ADD DL,30H
93 0087 B4 02 MOV AH,2H
94 0089 CD 21 INT 21H
95 008B B8 0000 MOV AX,0
96 008E A0 0073r MOV AL,DELITEL
97 0091 F6 36 0074r DIV TEN
98 0095 A2 0073r MOV DELITEL,AL
99 0098 8A C3 MOV AL,BL
100 009A E2 E0 LOOP CYCLEOUT
101 009C CB RET
102 009D OUR_PROG ENDP
103 009D CSEG ENDS
104 END OUR_PROG
Turbo Assembler Version 4.1 09/12/05 17:18:17 Page 3
Symbol Table
Symbol Name Type Value
??DATE Text "09/12/05"
??FILENAME Text "prog "
??TIME Text "17:18:17"
??VERSION Number 040A
@CPU Text 0101H
@CURSEG Text CSEG
@FILENAME Text PROG
@WORDSIZE Text 2
CYCLEOUT Near CSEG:007C
DELITEL Byte DSEG:0073
INSIDELOOP Near CSEG:0019
LESS Near CSEG:0040
MATRIX Word DSEG:0000
MAXCOL Word DSEG:0071
MAXSUM Word DSEG:006F
NOTFIRSTITER Near CSEG:0033
OUR_PROG Far CSEG:0000
OUTERLOOP Near CSEG:000F
POSSUM Near CSEG:0076
ROWLEN Word DSEG:0032
SHOWIS Byte DSEG:0064
SHOWMAX Byte DSEG:0034
TEN Byte DSEG:0074
TWO Byte DSEG:0075
Groups & Segments Bit Size Align Combine Class
CSEG 16 009D Para Public CODE
DSEG 16 0076 Para Public DATA
STACKSEG 16 0040 Para Public STACK
Вывод: В ходе лабораторной работы приобрели навыки написания программ с использованием вычислительных алгоритмов.