
лабораторная работа / лабораторные работы по ASSAMBLER / лаб3
.docМинистерство образования и науки Российской Федерации
Курский Государственный Технический Университет
Кафедра ПО ВТ
ЛАБОРАТОРНАЯ РАБОТА №3
ПРОГРАММИРОВАНИЕ ЦИКЛОВ. РАБОТА С ОДНОМЕРНЫМИ МАССИВАМИ
выполнил: студент гр. ПО-42
Эсауленко Д.В.
проверил: Родионов Д. И.
Курск 2007
Цель лабораторной работы
Освоение режимов адресации при работе с одномерными массивами, изучение способов организации циклов.
Задание
Написать программу, которая находит сумму четных (по значению) элементов одномерного массива.
Листинг программы
.model small
.data
m = 10 ; количество элементов массива
mas dw 1,2,3,4,5,6,7,8,9,10
sumEl dw 0
.stack 128
.code
mov AX,@data
mov DS,AX
mov BX,0 ; начальное смещение
mov CX,0 ; начальное значение счетчика
met:
cmp CX,m ; проверка на выход из цикла
je break ; метка выхода из цикла
push CX ; значение счетчика в стек
; проверка значения элемента на четность
mov AX,mas[BX]
mov DL,2
div DL
cmp AH,0
je additional; если значение четное
ja nextIt; если значение нечетное
additional: ; долбавление элемента к сумме
mov AX,sumEl
add AX,mas[BX]
mov sumEl,AX
add BX,2 ; смещение по массиву на 2 байта
pop CX ; значение счетчика из стека
inc CX
jmp met
nextIt: ; переход к следующей итерации
add BX,2
pop CX
inc CX
jmp met
break: ; выход из цикла
mov AX,4c00h
int 21h
end
LST файл
Turbo Assembler Version 3.1 17/03/07 17:35:20 Page 1
a.asm
1 0000 .model small
2
3 0000 .data
4 =000A m = 10
5 0000 0001 0002 0003 0004 + mas dw 1,2,3,4,5,6,7,8,9,10
6 0005 0006 0007 0008 +
7 0009 000A
8 0014 0000 sumEl dw 0
9
10 0000 .stack 128
11
12 0016 .code
13 0000 B8 0000s mov AX,@data
14 0003 8E D8 mov DS,AX
15
16 0005 BB 0000 mov BX,0
17 0008 B9 0000 mov CX,0
18 000B met:
19 000B 83 F9 0A cmp CX,m
20 000E 74 28 je break
21 0010 51 push CX
22
23 0011 8B 87 0000r mov AX,mas[BX]
24 0015 B2 02 mov DL,2
25 0017 F6 F2 div DL
26 0019 80 FC 00 cmp AH,0
27 001C 74 02 je additional
28 001E 77 11 ja nextIt
29
30 0020 additional:
31 0020 A1 0014r mov AX,sumEl
32 0023 03 87 0000r add AX,mas[BX]
33 0027 A3 0014r mov sumEl,AX
34 002A 83 C3 02 add BX,2
35 002D 59 pop CX
36 002E 41 inc CX
37 002F EB DA jmp met
38
39 0031 nextIt:
40 0031 83 C3 02 add BX,2
41 0034 59 pop CX
42 0035 41 inc CX
43 0036 EB D3 jmp met
44
45 0038 break:
46 0038 B8 4C00 mov AX,4c00h
47 003B CD 21 int 21h
48 end
Turbo Assembler Version 3.1 17/03/07 17:35:20 Page 2
Symbol Table
Symbol Name Type Value
??DATE Text "17/03/07"
??FILENAME Text "a "
??TIME Text "17:35:20"
??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 A
@INTERFACE Text 00H
@MODEL Text 2
@STACK Text DGROUP
@WORDSIZE Text 2
ADDITIONAL Near _TEXT:0020
BREAK Near _TEXT:0038
M Number 000A
MAS Word DGROUP:0000
MET Near _TEXT:000B
NEXTIT Near _TEXT:0031
SUMEL Word DGROUP:0014
Groups & Segments Bit Size Align Combine Class
DGROUP Group
STACK 16 0080 Para Stack STACK
_DATA 16 0016 Word Public DATA
_TEXT 16 003D Word Public CODE