Скачиваний:
68
Добавлен:
11.02.2014
Размер:
40.96 Кб
Скачать

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

Курский Государственный Технический Университет

Кафедра ПО ВТ

ЛАБОРАТОРНАЯ РАБОТА №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

Соседние файлы в папке лабораторные работы по ASSAMBLER