Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт_acc.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
225.79 Кб
Скачать

Реалізація програми

Завдання №1.

Model Small

Stack 256

DATASEG

N dw ?

Sum dw ?

i dw ?

Count_of_elements dw ?

A dw 10 dup (10 dup (?))

B dw 10 dup (10 dup (?)) ; матриця для виконання віднімання

const_matrix dw 87,22,43,21,99,91,11,17,55,22,44,0,18,21,33,0

matrix_B dw 100 dup (100 dup (?))

message_endl db 13,10,'$'

message_inputmas db 'please enter N , NxN size of matrix: $'

message_first_part_inp db 'Please enter [$'

message_second_part_inp db '] matrix element :$'

message_sum_is db 'suma parnyh= $'

message_count_of_elements db 'vsiogo elementiv - $'

message_count_of_zeroes db 'Nuliv u stovpci #$'

message_ryso4ka db '--------------------------------------------------',13,10,'$'

message_oberit db 'Please choose any punkt of menu ',13,10,'$'

mes_choose_1 db '1 - load from const matrix',13,10,'$'

mes_choose_2 db '2 - use keyboard to input matrix',13,10,'$'

message_incorect_input db 'Incorrect input please try again ',13,10,'$'

m_1 db '1 - Count the number of odd items and their sum',13,10,'$'

m_2 db '2 - Replace the matching items on 0',13,10,'$'

m_3 db '3 - Number of colum that consist of most elements that = 0',13,10,'$'

m_4 db '4 - Create B Matrix with sum [i]+[i+1] elements',13,10,'$'

exCode DB 0

CODESEG

Begin:

mov ax,@data

mov ds, ax

;виводимо повідомлення "Оберіть відповідний пункт меню",

;а також самі пункти меню , тобто

;"1 - Користуватися константною матрицею"

;"2 - Ввести матрицю з клавіатури "

call ryso4ka

mov ah, 09h

lea dx , message_oberit

int 21h

lea dx , mes_choose_1

int 21h

lea dx , mes_choose_2

int 21h

;отримуємо та аналізуємо введені дані

mov ah ,01h

int 21h

call endl

cmp al , '1' ;якщо введений символ один

je ConstLoad ;то переходимо до мітки ConstLoad

cmp al , '2' ;якщо введений символ 2 то переходимо

je InputMatrix ;до мітки InputMatrix

; в іншому випадку виводимо повідомлення про помилку

; вхідних даних та закінчуємо роботу програми

mov ah ,09h

lea dx ,message_incorect_input

int 21h

call exit

;Завантаження з константи

ConstLoad :

call load_from_constant ;в матрицю А значення константної матриці

call outputing_matrix ;виведення матриці

call Mainmenu ;виведення головного меню

;Введення з клавіатури

InputMatrix :

mov ah , 09h ; Повідомлення про

lea dx , message_inputmas; введення N

int 21h ; Кількості елементів матриці N*N

call inp_val ; Ввести значення з клавіатури, що буде в регістрі bx

mov [N] , bx ; Запам"ятати в N введене значення

call endl

call inputing_matrix ;введення матриці з клавіатури

call outputing_matrix ;виведення матриці

call Mainmenu ;виведення головного меню

;Вихід із програми

Exit:

mov ah, 04Ch

mov al , [exCode]

int 21h

;Зміщення каретки

endl:

push ax

push dx

mov ah , 09h

lea dx , message_endl

int 21h

pop dx

pop ax

ret

; Виведення роздільника типу "--------"

ryso4ka:

push ax

push dx

mov ah , 09h

lea dx , message_ryso4ka

int 21h

pop dx

pop ax

ret

; виведення числа із регістру ах

write_element :

push cx

push -1

podgotovka:

xor dx, dx

mov cx , 10

div cx

push dx

cmp ax , 0

jne podgotovka

mov ah ,02h

vyvedennja:

pop dx

cmp dx , -1

je goout

add dl , 30h

int 21h

jmp vyvedennja

goout:

pop cx

ret

;ВВедення значення з клавіатури

; що залишиться в вх

inp_val:

xor bx, bx

push ax

inp_n:

mov ah , 01h

int 21h

cmp al , 13

je after_inp_n

sub al , 48

push ax

mov ax , bx

mov bx , 10

mul bx

mov bx , ax

pop ax

add bl , al

jmp inp_n

after_inp_n:

pop ax

ret

;Виведення А матриці на екран

outputing_matrix :

call ryso4ka

mov si , 0

mov ax , [N]

mul ax

mov cx , ax

mov bx , [N]

GoOutput :

mov ax , A[si]

call write_element

mov ah , 02h

mov dl ,' '

int 21h

add si , 2

dec bx

cmp bx , 0

jne gO_

call endl

mov bx , [N]

gO_:

loop GoOutput

ret

;Виведення В матриці на екран

outputing_B_matrix :

call ryso4ka

mov si , 0

mov ax , [N]

mul ax

mov cx , ax

mov bx , [N]

GoOutput_ :

mov ax , B[si]

call write_element

mov ah , 02h

mov dl ,' '

int 21h

add si , 2

dec bx

cmp bx , 0

jne gO__

call endl

mov bx , [N]

gO__:

loop GoOutput_

ret

;ВВедення матриці

inputing_matrix :

xor bx , bx

xor si , si

mov ax , [N]

mul ax

mov cx , ax

call ryso4ka

input_go:

mov ah , 09h

lea dx , message_first_part_inp

int 21h

mov ax ,[N]

mul ax

sub ax , cx

inc ax

call write_element

mov ah , 09h

lea dx , message_second_part_inp

int 21h

call inp_val

mov A[si] ,bx

add si , 2

call endl

loop input_go

ret

;Завантаження в матрицю А значень із константної матриці

load_from_constant:

mov [N] , 4

mov cx , [N]

lea di , const_matrix

mov bx , 0

external_load:

push cx

mov cx , [N]

mov si , 0

internal_load:

mov dx , [di]

mov A[bx][si], dx

add si , 2

add di , 2

loop internal_load

pop cx

add bx ,8

loop external_load

ret

;Підраховуємо суму парних елементів та їх кількість , та

;Заносимо їх значення в змінні SUm та count_of_elements

LetsGetSum:

call ryso4ka

mov cx , [N]

mov bx , 0

external_GetSum:

push cx

mov cx , [N]

mov si , 0

internal_GetSum:

mov ax , A[bx][si]

mov dl , 2

div dl

cmp ah, 0

jne ifNeParne

mov dx , [Sum]

add dx , A[bx][si]

mov [Sum] , dx

mov dx , [count_of_elements]

inc dx

mov [count_of_elements] , dx

ifNeParne:

add si , 2

loop internal_GetSum

pop cx

mov ax , [N]

mov dx ,2

mul dx

add bx ,ax

loop external_GetSum

ret

;Замінюємо парні елементи на 0

LetsChangeElements:

mov cx , [N]

mov bx , 0

external_CH:

push cx

mov cx , [N]

mov si , 0

internal_CH:

mov ax , A[bx][si]

mov dl , 2

div dl

cmp ah, 0

je ifParne

mov dx , 0

mov A[bx][si], dx

ifParne:

add si , 2

loop internal_CH

pop cx

mov ax , [N]

mov dx ,2

mul dx

add bx ,ax

loop external_CH

ret

;Обраховуємо кількість нулів у стовпцях матриці

CountingZeroes:

call ryso4ka

mov cx , [N]

mov di , 0

mov [i] , 0

ex_:

mov si , di

mov bx , 0

push cx

mov cx ,[N]

in_:

mov dx , A[si]

cmp dx , 0

jne after_

inc bx

after_:

mov ax , [N]

mov dx ,2

mul dx

add si ,ax

loop in_

pop cx

add di ,2

mov ah ,09h

lea dx ,message_count_of_zeroes

int 21h

mov dx , [i]

inc dx

mov [i] ,dx

mov ax , [i]

call write_element

mov ah , 02h

mov dl , ' '

int 21h

mov ax , bx

call write_element

call endl

loop ex_

ret

; виведення головного меню

Mainmenu:

call ryso4ka

mov ah ,09h

lea dx ,message_oberit

int 21h

lea dx , m_1

int 21h

lea dx , m_2

int 21h

lea dx , m_3

int 21h

lea dx , m_4

int 21h

call ryso4ka

mov ah ,01h

int 21h

call endl

cmp al , '1'

je gomsg1

cmp al , '2'

je gomsg2

cmp al , '3'

je gomsg3

cmp al , '4'

je gomsg4

mov ah ,09h

lea dx ,message_incorect_input

int 21h

call exit

gomsg1:

call LetsGetSum

mov ah , 09h

lea dx ,message_count_of_elements

int 21h

mov ax , [Count_of_elements]

call write_element

call endl

mov ah ,09h

lea dx , message_sum_is

int 21h

mov ax , [Sum]

call write_element

call endl

call exit

gomsg2:

call LetsChangeElements

call outputing_matrix

call exit

gomsg3:

call CountingZeroes

call exit

gomsg4:

call Create_B_Matrix

call outputing_B_matrix

call exit

ret

; Утворення матриці В

;шляхом додавання до кожного елементу

;рядка наступного елементу рядка

;до останнього додавши 1ший

Create_B_Matrix :

mov si , 0

mov bx , 0

mov cx , [N]

external_BM :

push cx

mov cx, [N]

mov bx , si

mov di , 0

internal_BM:

mov dx , A[si]

mov ax , A[si+2]

add dx , ax

mov B[si],dx

cmp cx , 2

jne afterthis

dec cx

mov dx , A[si+2]

mov ax , A[BX]

add dx , ax

mov B[si+2] , dx

afterthis:

add si ,2

loop internal_BM

pop cx

add si ,2

loop external_BM

ret

END Begin

Завдання№2.

Model Small

Stack 256

DATASEG

MessageInputString db 'Please input the string $' ; повідомлення "введіть рядок"

MessageError db 'Error , please try again $';повід. "помилка ,попробуйте ще раз"

MessagePoint db , 'The string was inputed without error $' ; пов "рядок введено без помилки"

MessageEndl db 13,10,'$'

exCode DB 0

CODESEG

Begin:

mov ax,@data

mov ds, ax

mov ah , 09h ;виводимо повідомлення про

lea dx , MessageInputString ;початок введення рядка

int 21h ;із клавіатури

call endl ; перевести каретку на початок наступного рядка

INPUT: ; введення рядку з клавіатури

mov bl , al

mov ah , 01h ; функція 21го переривання

int 21h ; що відповідає за введення символу з клавіатури

cmp al , '.' ; порівнюємо введений символ з "."

je AFTER ; якщо "." то перейти на мітку "AFTER"

cmp al , ','

jne INPUT

cmp al ,bl

jne INPUT

call endl

mov ah ,09h

lea dx , MessageError

int 21h

jmp exit

AFTER:

call endl

mov ah ,09h

lea dx , MessagePoint

int 21h

Exit:

mov ah, 04Ch

mov al , [exCode]

int 21h

endl:

push ax

push dx

mov ah , 09h

mov dx , offset MessageEndl

int 21h

pop dx

pop ax

ret

END Begin