Підпрограма , що відповідає за виведення числа із регістру ах на дисплей .
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
Принцип роботи : спочатку заносимо в стек число -1 , для того , щоб знати коли саме припиняти роботу, далі кожного разу ділимо число в регістрі ах на 10 та заносимо значення в стек , потім просто виводимо значення із стеку на дисплей ,поки не дійдемо до -1 .
Підпрограма , що відповідає за введення числа із клавіатури .
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
Принцип роботи : користуючись 1 функцією 21-го переривання зчитуємо символ , перевіряємо чи введено не «Enter» якщо ж ні , то
за умовою , що вводяться числа , маємо цифру в регістрі аl , множимо регістр bx (в якому і буде результат ) на 10 та додаємо введену цифру . В bx отримуємо число , що вводилося з клавіатури .
Підпрограма , що відповідає за виведення матриці на дисплей .
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
Принцип роботи : йдемо по всіх елементах відповідної матриці та користуючись функцією “write_element” виводимо значення на дисплей .
Підпрограма , що відповідає за введення матриці із клавіатури .
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
Принцип роботи : спочатку виводимо повідомлення , що треба ввести наступний елемент матриці , потім користуючись функцією «inp_val» заповнюємо відповідну матрицю введеними значеннями .
|
|
Підпрограма , що відповідає за завантаження в відповідну матрицю значень із матриці заданої константно.
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
Принцип роботи : спочатку встановлюємо в N розмір матриці , в даному випадку це 4 , тобто матриця матиме розмір 4х4 , йдемо елементами константної матриці та переписуємо значення в задану .
Підпрограма , що відповідає за введення матриці із клавіатури .
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
Принцип роботи : йдемо елементами заданої матриці , якщо зустрічаємо парний елемент то додаємо його до суми , та збільшуємо лічильник парних елементів , пройшовши всі елементи значення суми та кількості парних елементів будуть збережені в змінних “Sum” та “Count_of_elements” відповідно .
|
|
Підпрограма , що відповідає за заміну непарних елементів на 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
Принцип роботи : йдемо елементами заданої матриці , якщо зустрічаємо непарний елемент то замінюємо його на 0.
Підпрограма , що відповідає за підрахунок нулів у стовпцях матриці.
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
Принцип роботи : утворюємо цикл обходу матриці по стовпцях , в якому підраховуємо кількість нулів у кожному із стовпців , на кожній ітерації зовнішнього циклу (ex_: .. loop ex_), тобто після N ітерацій внутрішнього циклу(in_: … loop in_) виводимо на дисплей повідомлення про кількість нулів у даному рядку .
|
|
Дата добавления: 2018-10-27; просмотров: 168; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!