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

Учебное пособие 903

.pdf
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
645.9 Кб
Скачать

 

 

 

4.1. Текст программы

 

 

 

(файл prim3.asm)

%nolist

 

 

 

include mac.lib

 

 

%list

 

 

 

 

a_datasegment

para

 

;отмечаемначалосегментаданных

;

 

 

 

 

n

dw

?

 

 

m

dw

?

 

 

X

DW

10 dup (?)

;описание массива A из

10 элементов

 

 

Y

DW

8dup(?)

;описание массива B из 8

элементов

 

 

 

kolX

dw

?

; Для числа четных элементов

массива X

 

 

 

kolY

dw

?

; Для числа четных элементов

массива Y

 

 

 

;Сообщения программы

mesa

db

10, 13,

 

' Ввод массива

X$'

mesb

db

10, 13, '

Ввод массива

Y $'

mes1

db

10, 13,' Введите число элементов

массиваX=$';

 

 

 

 

mes2

db

10, 13, 'Введите число элементов

массиваY=$';

 

 

 

 

mesch db

10,13,'

?

$'

 

 

mes3

db

10,13,10,13, '

МассивX : $'

mes4

db

10,13, ' МассивY: $'

 

mes5

db

10,13,'

четных элементов:$'

informdb

10,13,' Фамилия имя вар-т группа $' ;

!Замените на свое

 

 

 

 

task

db

10,13,'

Условие задачи

$'

a_data

ends

 

 

 

 

;отмечаем начало сегмента стека

a_stack

segment

para stack

db

128 dup(?)

 

a_stack

ends

 

; отмечаем начало сегмента кодов a_code segment para assumeds:a_data, cs:a_code, ss:a_stack

19

;Тексты процедур

;Вывод информации ОБ авторе и задании ....

about proc near message inform

message task crlf

ret about endp

; Процедура Вывод целого числа со знаком из регистра AX

printproc near print_number ret

print endp

;Ввод с консоли целого числа со знаком в регистр

AX

;При вводе ошибочного символа повторный ввод vvod1proc near

er: message

mesch

key_$2bin

; При ошибке ввода флаг CF

устанавливается в 1

jncvozvrat

;

Если флаг CF=1, то переход на

повторный ввод

 

jmper

 

 

vozvrat:

ret

 

vvod1 endp

; Ввод элементов одномерного массива целых чисел со

знаком

 

vvod_mas

proc near

; bxадрес массива cx-количество элементов

mov

si,0

 

 

cikl1:

call

vvod1

 

mov

[bx]+[si],ax

add

si,2

 

 

loop

cikl1

 

ret

 

vvod_mas

endp

 

; Вывод

элементов одномерного массива целых чисел

со знаком

 

 

print_mas

proc

near

;параметры

20

;bxадрес массива

;cx-количество элементов

mov si,0 cikl2:

mov ax,[bx]+[si] call print

add si,2

loop cikl2 ret

print_mas endp

;Процедура подсчета четных элементов массива

Vech PROC NEAR

;передача параметров через регистры

;bxсмещение массива

;cxчисло элементов в массиве

;axрезультат вычисления( число четных элементов)

 

mov

si,2

 

; Подготовка делителя =2

mov

di,0

; Нуль в счетчик четных элементов

 

cmp

CX, 0

 

; проверка, не равен ли CX

нулю

 

 

 

 

 

jzVecHExit

;

если нуль, то на выход

L1:

 

 

 

 

 

mov

ax,[bx] ; загрузка элемента массива а

регистр AX косвенная адрес-я

cwd

; подготовка к делению( расширение до двойного

слова DX:AX

 

 

 

idiv

si ; деление со знаком на 2 для

получения признака четности

 

cmp

dx,0

 

; сравнение остатка с нулем

 

jnz

next

; если не нуль, перейти к

следующему элементу

 

 

add

di,1

; иначе увеличить счетчик

четных элементов на 1 next:

addbx, 2 ; подготовка в регистре BX адреса следующего элемента

21

loop L1

; Управление циклом по CX : cx=cx-1; cx<>0

на метку

L1

 

 

VecHExit:

 

 

 

mov

ax,di ; пересылка счетчика DI в регистр AX

 

ret

;

 

 

VecH ENDP

 

; Конец процедуры

VecH

;

Главная программа

 

 

begin: mov AX, a_data

;инициализация регистра

 

mov DS, AX

; сегмента данных

DS

cls call about

message mes1 call vvod1

mov n,ax

message

mes2

 

call

vvod1

 

 

 

mov

m,ax

 

message

mesa

 

lea

bx,a

 

 

 

mov

cx,n

 

 

 

 

callvvod_mas

message

mesb

 

lea

bx,b

 

 

 

 

mov

cx,m

 

call

vvod_mas

 

 

;

 

 

 

 

 

leaBX,

A

;заносим в BX начало массива А

 

mov CX, n

;в СХ заносим количество

итераций

 

 

 

 

callvech

;вызов процедуры

 

movkolA,ax

; пересылка в ячейку kolA

;

 

 

 

 

 

lea

BX, b ;заносим в BX начало массива B

 

mov CX, m

;в СХ заносим количество

итераций

 

 

 

22

callVecH ;вызов процедуры VecH movkolB,ax ; пересылка вячейкуkolB

call about message mes3 lea bx,a

mov cx,n callprint_mas message mes5

mov ax,kolA print_number

;

 

 

 

 

message

mes4

lea

bx,b

 

 

mov

cx,m

 

 

 

callprint_mas

 

message

mes5

 

mov

ax, kolB

 

 

print_number

 

;

 

 

 

inkey

;паузадонажатияклавиши

 

movAX,4C00h

;выход

 

int 21h

;изпрограммы

a_code

ends

 

end

begin

 

 

23

5. ЗАДАНИЯ КУРСОВОЙ РАБОТЫ

5.1. Общая часть

Заданы два массива X[10] и Y[12], состоящих из целых чисел со знаком в формате слова. Выполнить над массивами действия согласно индивидуальному заданию.

Программа должна иметь модульную структуру. Выделить процедуры: ввода массива с консоли, вывода массива, вывода информации об авторе и условии решенной задачи. Выполнить вывод массивов на экран до обработки и после обработки согласно варианту.

5.2.Индивидуальные варианты заданий

1.Составить процедуру, которая вычисляет сумму неотрицательных элементов в массиве. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений (число неотрицательных элементов).

2.Составить процедуру вычисления числа элементов в массиве, по абсолютной величине меньших 100. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

3.Составить процедуру вычисления суммы элементов массива, значения которых кратны 3 или 7. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений).

24

4.Составить процедуру, которая уменьшает в два раза элементы с положительными значениями и заменяет нулевые элементы на -10. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве.

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

ВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

6.Составить процедуру, которая меняет знаки на обратный у элементов, больших по абсолютной величине 100. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве.

7.Составить процедуру подсчета количества элементов, значения которых четные отрицательные числа. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

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

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – искомый номер элемента.

9.Составить процедуру, которая подсчитывает элементы, значения которых простые числа. Передача параметров через регистры:

вВХ – смещение массива;

25

вСХ – число элементов в массиве

вАХ – результат вычислений.

10.Составить процедуру вычисления суммы тех элементов в массиве, чьи значения кратны 7. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

11.Составить процедуру, которая вычисляет сумму неотрицательных нечетных чисел в массиве. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

12.Составить процедуру подсчета элементов в массиве, по абсолютной величине меньших 80. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений (число искомых элементов).

13.Составить процедуру подсчета элементов массива, значения которых заключены в пределах от -10 до 10. Передача параметров через регистры:

вВХ – смещение массива;

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений (число искомых элементов).

26

14.Составить процедуру подсчета числа элементов массива, значения которых являются степенью 2. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

15.Составить процедуру подсчета суммы элементов массива, значения которых положительны и не делятся на 3. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений (сумма элементов

массива).

16.Составить процедуру количества повторения значения первого элемента в массиве. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

17.Составить процедуру, которая находит наименьший элемент и делит на него все элементы. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве.

18.Составить процедуру, которая уменьшает вдвое отрицательные элементы массива. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве.

27

19.Составить процедуру поиска элемента массива, значение которого наибольшее по абсолютной величине. Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве;

вАХ – результат вычислений.

20.Составить процедуру, которая сортирует элементы в массиве по возрастанию методом «пузырька». Передача параметров через регистры:

вВХ – смещение массива;

вСХ – число элементов в массиве.

5.3.Контрольные вопросы

1.Что такое модульное программирование? Дайте определение понятию модуль.

2.Какие есть разновидности модулей? Как они функционируют?

3.Из чего состоит структурный подход к программированию?

4.Какие средства используются во избежание дублирования фрагментов программного кода?

5.Дайте определение понятию подпрограмма. Зачем она используется?

6.Каким образом оформляется синтаксис процедур?

7.Как осуществляется вызов процедур? Какие существуют виды обращения к процедурам?

28