Текст программы (файл prim2.asm) для транслятора TASM.exe




; Пример выполнения курсового проекта МОЯ спец. ЭВМз

%nolist

include mac.lib; подключение файла с макросами –библиотека макросов mac.lib

%list

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

n dw?; Поле для числа элементов массива X

m dw?; Поле для числа элементов массива Y

X DW 10 dup (?);Поле для массива X из 10 элементов

Y DW 8 dup(?);Поле для массиваY из 8 элементов

kolX dw?; поле для числа четных элементов массива X

kolY dw?; поле для числа четных элементов массива Y

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

mesa db 10, 13, ' VVOD MASSIVA X [1..N] $'

mesb db 10, 13, ' VVOD MASSIVA Y [1..M] $'

mes1 db 10, 13,' Vvedite kolichestvo elementov massiva X [1..10] N=$';

mes2 db 10, 13, 'Vvedite kolichestvo elementov massiva Y [1..8] M =$';

mesch db 10,13,'? $'

mes3 db 10,13,10,13, ' MASSIV X: $'

mes4 db 10,13, ' MASSIV Y: $'

mes5 db 10,13,' CHETNIX ELEMENTOV: $'

inform db 10,13,' FAMOILIA IMiA Variant Group $';!Замените на свое

task db 10,13,' USLOVIE ZADACHI $'

a_data ends

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

a_stack segment para stack

db 128 dup(?)

a_stack ends

 

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

a_code segment para

assume ds:a_data, cs:a_code, ss:a_stack

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

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

about proc near

message inform

message task

crlf

ret

about endp

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

print proc near

print_number

ret

print endp

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

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

vvod1 proc near

er: message mesch

key_$2bin; При ошибке ввода флаг CF устанавливается в 1

jnc vozvrat; Если флаг CF=1, то переход на повторный ввод

jmp er

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

; параметры

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

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

;

mov si,0

cikl2:

mov ax,[bx]+[si]

call print

add si,2

loop cikl2

ret

print_mas endp

 

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

SCHET PROC NEAR

 

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

; bx- смещение массива или адрес первого элемента массива

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

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

;

; использование регистров:

; SI-содержит делитель(2) для проверки четности

; DI – накапливает количество четных чисел

; CX – счетчик повторений цикла

; ВХ –для обращения к элементу переданного массива [BX] базовая;;адресация

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

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

cmp CX, 0; проверка, не равен ли CX нулю

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

 

L1:

mov ax,[bx]; загрузка элемента массива а регистр AX косвенная адрес-я

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

idiv si; деление со знаком на 2 для получения признака четности

cmp dx,0; сравнение остатка с нулем

jnz next; если не нуль, перейти к следующему элементу

add di,1; иначе увеличить счетчик четных элементов на 1

next:

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

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

SHET_Exit:

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

ret;

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

 

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

 

begin: mov AX, a_data; инициализация регистра

mov DS, AX; сегмента данных DS

 

cls; очистка экрана

call about; вызов проц. about вывод информации о проекте

; Ввод значения N

message mes1

call vvod1; вызов проц. vvod1 для ввода кол-ва элементов массива X

mov n,ax

; Ввод значения M

message mes2

call vvod1; вызов проц. vvod1 для ввода кол-ва элементов массива Y

mov m,ax

 

message mesa

lea bx,X

mov cx,n

call vvod_mas; вызов процедуры vvod_mas для ввода массива X

message mesb

lea bx,Y

mov cx,m

call vvod_mas; вызов процедуры vvod_mas для ввода массива Y

; Нахождение числа четных чисел в массиве X

lea BX, X;заносим в BX начало массива X

mov CX, n;в СХ заносим число элементов массива X

call SCHET;вызов процедуры SCHET для подсчета четных чисел в массиве X

mov kolX, ax; пересылка в ячейку kolX

; Нахождение числа четных чисел в массиве Y

lea BX, Y;заносим в BX начало массива Y

mov CX, m;в СХ заносим число элементов массива Y

call SCHET;вызов процедуры SCHET для подсчета четных чисел в массиве Y

 

mov kolY,ax; из АХ -> в ячейку kolB

cls; Макрос очистки экрана

call about;вызов проц. вывода информации о проекте

message mes3

lea bx, X

mov cx,n

call print_mas;вызов процедуры print_mas для вывода массива X

; Вывод количества четных чисел массива X макрокомандой print_number

message mes5

mov ax, kolX

print_number

;

message mes4

lea bx,Y

mov cx,m

call print_mas;вызов процедуры print_mas для вывода массива Y

; Вывод количества четных чисел массива Y макрокомандой print_number

 

message mes5

mov ax, kolY

print_number

;

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

mov AX,4C00h;выход

int 21h;из программы

a_code ends; конец сегмента кода

end begin

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: