
лабораторная работа / лабораторные работы по ASSAMBLER / лаб4
.docМинистерство образования и науки Российской Федерации
Курский Государственный Технический Университет
Кафедра ПО ВТ
ЛАБОРАТОРНАЯ РАБОТА №4
ПРОГРАММИРОВАНИЕ ВЛОЖЕННЫХ ЦИКЛОВ
выполнил: студент гр. ПО-42
Эсауленко Д.В.
проверил: Родионов Д. И.
Курск 2007
Цель лабораторной работы
Освоение базово-индексной и базово-индексной со смещением адресаций при работе с 2-мерными массивами, а также форм записи базово-индексной адресаций; изучение способов организации циклов.
Задание
Написать программу, которая находит максимальный элемент в каждой строке и в каждом столбце массива.
LST файл
Turbo Assembler Version 3.1 25/03/07 12:39:08 Page 1
4.asm
1 0000 .model small
2
3 0000 .data
4 =0004 m = 4
5 =0004 n = 4
6 =0008 subVar = 8
7
8 0000 0001 0002 0003 0004 mas dw 1, 2, 3, 4
9 0008 0005 0006 0007 0008 dw 5, 6, 7, 8
10 0010 0009 000A 000B 000C dw 9, 10,11,12
11 0018 000D 000E 000F 0010 dw 13,14,15,16
12
13 0020 ???? max dw ?
14 0022 04*(????) maxRow dw 4 dup(?)
15 002A 04*(????) maxCount dw 4 dup(?)
16
17 0000 .stack 128
18
19 0032 .code
20 0000 B8 0000s mov AX,@data
21 0003 8E D8 mov DS,AX
22
23 ;максимумы в строках
24 0005 BB 0000 mov BX,0
25 0008 BF 0000 mov DI,0
26 000B B9 0000 mov CX,0
27 000E met1:
28 000E 83 F9 04 cmp CX,m
29 0011 74 39 je break1
30 0013 51 push CX
31 0014 BE 0000 mov SI,0
32 0017 8B 80 0000r mov AX,mas[BX][SI]
33 001B A3 0020r mov max,AX
34 001E B9 0004 mov CX,n
35 0021 met2:
36 0021 51 push CX
37 0022 8B 80 0000r mov AX,mas[BX][SI]
38 0026 3B 06 0020r cmp AX,max
39 002A 73 02 jae newRowMax
40 002C 72 07 jb next1
41 002E newRowMax:
42 002E 8B 80 0000r mov AX,mas[BX][SI]
43 0032 A3 0020r mov max,AX
44 0035 next1:
45 0035 83 C6 02 add SI,2
46 0038 59 pop CX
47 0039 E2 E6 loop met2
48 003B A1 0020r mov AX,max
49 003E 89 85 0022r mov maxRow[DI],AX
50 0042 83 C7 02 add DI,2
51 0045 83 C3 08 add BX,subVar
52 0048 59 pop CX
53 0049 41 inc CX
54 004A EB C2 jmp met1
55
56 004C break1:
57 ;максимумы в столбцах
58 004C BB 0000 mov BX,0
59 004F BF 0000 mov DI,0
60 0052 B9 0000 mov CX,0
61 0055 met3:
62 0055 83 F9 04 cmp CX,n
63 0058 74 39 je break2
64 005A 51 push CX
65 005B BE 0000 mov SI,0
66 005E 8B 80 0000r mov AX,mas[BX][SI]
67 0062 A3 0020r mov max,AX
68 0065 B9 0004 mov CX,m
69 0068 met4:
70 0068 51 push CX
71 0069 8B 80 0000r mov AX,mas[BX][SI]
72 006D 3B 06 0020r cmp AX,max
73 0071 73 02 jae newCountMax
74 0073 72 07 jb next2
75 0075 newCountMax:
76 0075 8B 80 0000r mov AX,mas[BX][SI]
77 0079 A3 0020r mov max,AX
78 007C next2:
79 007C 83 C6 08 add SI,subVar
80 007F 59 pop CX
81 0080 E2 E6 loop met4
82 0082 A1 0020r mov AX,max
83 0085 89 85 002Ar mov maxCount[DI],AX
84 0089 83 C7 02 add DI,2
85 008C 83 C3 02 add BX,2
86 008F 59 pop CX
87 0090 41 inc CX
88 0091 EB C2 jmp met3
89
90 0093 break2:
91 0093 B8 4C00 mov AX,4c00h
92 0096 CD 21 int 21h
93 end
Turbo Assembler Version 3.1 25/03/07 12:39:08 Page 3
Symbol Table
Symbol Name Type Value
??DATE Text "25/03/07"
??FILENAME Text "4 "
??TIME Text "12:39:08"
??VERSION Number 030A
@32BIT Text 0
@CODE Text _TEXT
@CODESIZE Text 0
@CPU Text 0101H
@CURSEG Text _TEXT
@DATA Text DGROUP
@DATASIZE Text 0
@FILENAME Text 4
@INTERFACE Text 00H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
BREAK1 Near _TEXT:004C
BREAK2 Near _TEXT:0093
M Number 0004
MAS Word DGROUP:0000
MAX Word DGROUP:0020
MAXCOUNT Word DGROUP:002A
MAXROW Word DGROUP:0022
MET1 Near _TEXT:000E
MET2 Near _TEXT:0021
MET3 Near _TEXT:0055
MET4 Near _TEXT:0068
N Number 0004
NEWCOUNTMAX Near _TEXT:0075
NEWROWMAX Near _TEXT:002E
NEXT1 Near _TEXT:0035
NEXT2 Near _TEXT:007C
SUBVAR Number 0008
Groups & Segments Bit Size Align Combine Class
DGROUP Group
STACK 16 0080 Para Stack STACK
_DATA 16 0032 Word Public DATA
_TEXT 16 0098 Word Public CODE