Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Текст програм та її опис на мові програмування Асемблер




IDEAL

MODEL small

STACK 256

MACRO koordun x1,y1

mov ah,02h; функція установки позиції курсора

mov bh,0; номер сторінки

mov dh,y1; стрічка

mov dl,x1; стовпчик

int 10h; виклик BIOS

ENDM koordun

MACRO fon x1,y1,x2,y2,kolir

mov ah,06h; ініціалізація вікна

mov al,0; очищення

mov bh,kolir; атрибути символів у вікні

mov ch,y1; рядок

mov cl,x1; стовпець

mov dh,y2; рядок

mov dl,x2; стовпець

int 10h; виклик BIOS

ENDM fon

MACRO DOS_09h msg0

mov ah,09h; виведення на екран

mov dx,offset msg0; адрес msg0

int 21h; виклик DOS

ENDM

MACRO BIOS_09h p,kolir

mov ah,09h; виведення символа на екран

mov al,p; ASCII код символу

mov bl,kolir; атрибут символа

mov bh,0; номер сторінки

mov cx,1; кількість повторень

int 10h; виклик BIOS

ENDM

MACRO storinka x1,y1,kolir

local loopst7; оголошення мітки локальною

mov si,0; обнулення si

mov cx,8; кількіть циклів

loopst7: push cx; занесення cx у стек

koordun x1,y1; виклик макросу

BIOS_09h st+si,kolir; виклик макросу

inc y1; інкремент y1

inc si; інкремент si

pop cx; взяття із стеку

loop loopst7; команда циклу із cx кроків

ENDM

MACRO bufk_01110101

local loop20; оголошення мітки локальною

mov si,0; обнулення si

mov cx,6250; кількіть циклів

loop20: mov buf1k+si,01110101b; задання кольору

mov buf2k+si,01110101b; задання кольору

inc si; інкремент si

loop loop20; команда циклу із cx кроків

ENDM

DATASEG

H db 0

p db?

msg0 db?

kolir db?

slovo db 50 dup ('$')

handle dw 0

znaksi dw?

mak_buf1 dw?

mak_buf2 dw?

buf1vel db 6250 dup (?)

buf2vel db 6250 dup (?)

buf1 db 6250 dup (?)

buf2 db 6250 dup (?)

buf1k db 6250 dup (01110101b)

buf2k db 6250 dup (01110101b)

fname1 db 50 dup ('$'),0

fname2 db 50 dup ('$'),0

ExCode DB 0

kolor db?

x1 db?

k db?

x2 db?

y1 db?

y2 db?

n db 30h

m db 30h

st db 'STORINKA'

msg db 2*80 dup (20h)

db 20h,0c9h,0cdh,0d1h,20 dup (0cdh),20h,54 dup (0cdh),0bbh

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0c8h,0cdh,0cfh,75 dup (0cdh),0bch

db 20h,0c9h,0cdh,0d1h,20 dup (0cdh),20h,54 dup (0cdh),0bbh

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0bah,20h,0b3h,75 dup (20h),0bah

db 20h,0c8h,0cdh,0cfh,75 dup (0cdh),0bch

db '$'

n_si dw?

n_di dw?

msg1 db 10,13,'‚ўҐ¤iвм i`п ЇҐаи®Ј® д ©«: $'; Введіть і`мя першого файла

msg2 db 10,13,'” ©«­Ґ ­ ©¤Ґ­$'; файл нен найден

msg3 db 10,13,'Џгвм ­Ґ ­ ©¤Ґ­$'; путь не найден

msg4 db 10,13,'‘«ЁиЄ® ­®Ј® ®вЄаЁвЁе д ©«®ў$'; слишком много откритих файлов

msg5 db 'Esp: ўўҐ¤Ґ­­п i`п бЇ®з вЄг, Backsp: бвЁа ­­п §«iў, Ctrl-c: ўЁеi¤$'

msg6 db 10,13,'ЌҐЇа ўЁ«м­Ё© ०Ё ¤®бвгЇ$'; неправильний режим доступу

msg7 db 10,13,'‚ўҐ¤iвм i`п ¤агЈ®Ј® д ©«: $'; Введіть і`мя другого файла

msg9 db ' -®¤­ Є®ўi, -аi§­i, -§­ Є в Ўг«пжiх, -§­ Є Ў§ жг$'

msg10 db 10,13,'‚ўҐ¤iвм 1 пЄй® ­Ґ е®зҐвҐ ЇҐаҐўiапвЁ Їа®Ёб­i ЎгЄўЁ $'

msg11 db ' F5: Ї®аiў. Ї® б«®ў, F6: Ї®аiў. Ї® ®¤­®г ҐҐ­.,$'

msg13 db ' F8: ­Ґ Ї®аiў. Їа®ЇЁб­Ёе ЎгЄў, Tab: ЄвЁў­iбвм Ї ­Ґ«Ґ©, F10: ўЁеi¤$'

msg12 db 10,13,13,20 dup (20h),'”Ђ‰‹€ ђI‚ЌI$'

CODESEG

Start: mov ax,@data; адрес сегмента даних спочатку присвоюємо AX

mov ds,ax; а пізніше пересилаємо з AX в DS

mov es,ax; в ES заносимо адрес AX

 

DOS_09h msg5; виклик макроса

; ВВЕДЕННЯ НАЗВИ ФАЙЛА 1

esc1:

DOS_09h msg1; виклик макроса

 

mov bx,0; обнуляємо BX

vvid_fname1:

mov ah,08h; виклик функції DOS 08h

int 21h; виклик DOS

cmp al,13; порівняння з ентером

je ente; перехід на ente, якщо рівно

cmp al,1bh; порівняння з Esc

je esc1; перехід на esc1, якщо рівно

cmp al,08h; порівняння з Backsp

jne backsp; перехід на backsp, якщо не рівно

dec bx; декремент BX

dec bx; декремент BX

jmp dal2; перехід на dal2

backsp:

mov fname1+bx,al; присвоєння fname1+bx значення al

dal2:

mov ah,02h; виклик функції DOS виведення на екран

mov dl,al; в DL заноситися ASCII код виведеного символу

int 21h; виклик DOS

inc bx; інкремент BX

jmp vvid_fname1; перехід на vvid_fname1

ente: mov fname1+bx,' '; в кінець буфера заносимо пробіл

; ВІДКРИВАННЯ ФАЙЛУ 1

mov ah,3Dh; функція відкривання файла

mov al,2; доступ для читання і запису

mov dx,offset fname1; адрес ім`я файлу

int 21h; виклик DOS

mov handle,ax; зберігаємо дескриптор

cmp ax,02h; файл нен найден

jne pom_02h; перехід на pom_02h, якщо не рівно

DOS_09h msg2; виклик макросу

jmp vvid_fname1; перехід на vvid_fname1

pom_02h:

cmp ax,03h; шлях не найден

jne pom_03h; перехід на pom_03h, якщо не рівно

DOS_09h msg3; виклик макросу

jmp vvid_fname1; перехід на vvid_fname1

pom_03h:

cmp al,04h; слишком много откритих файлов

jne pom_04h; перехід на pom_04h, якщо не рівно

DOS_09h msg4; виклик макросу

jmp vvid_fname1; перехід на vvid_fname1

pom_04h:

cmp al,0ch; неправильний режим доступу

jne pom_0ch; перехід на pom_0сh, якщо не рівно

DOS_09h msg6; виклик макросу

jmp vvid_fname1; перехід на vvid_fname1

pom_0ch:

; ЧИТАННЯ ФАЙЛУ 1

mov ah,3fh; функція читання файла

mov bx,handle; дескриптор

mov cx,6250; кількість читання байтів

mov dx,offset buf1; адрес buf1

int 21h; виклик DOS

mov mak_buf1,ax; кількість реально прочитали

; ВВЕДЕННЯ НАЗВИ ФАЙЛУ 2

esc2:

DOS_09h msg7; виклик макросу

mov bx,0; обнуляємо BX

vvid_fname2:

mov ah,08h; функція введення символу

int 21h; виклик DOS

cmp al,13; порівняння з ентером

je ente1; перехід на ente1, якщо рівно

cmp al,1bh; порівняння з Esc

je esc2; перехід на esc2, якщо рівно

cmp al,08h; порівняння з Backsp

jne backsp1; перехід на backsp1, якщо не рівно

dec bx; декремент BX

dec bx; декремент BX

jmp dal3; перехід на dal3

backsp1:

mov fname2+bx,al; присвоєння fname2+bx значення al

dal3:

mov ah,02h; виклик функції DOS виведення на екран

mov dl,al; в DL заноситися ASCII код виведеного символу

int 21h; виклик DOS

inc bx; інкремент BX

jmp vvid_fname2; перехід на vvid_fname2

ente1: mov fname2+bx,' '; в кінець буфера заносимо пробіл

; ВІДКРИВАННЯ ФАЙЛУ 2

mov ah,3Dh; функція відкривання файла

mov al,2; доступ для читання і запису

mov dx,offset fname2; адрес ім`я файлу

int 21h; виклик DOS

mov handle,ax; зберігаємо дескриптор

cmp ax,02h; файл нен найден

jne pom_02h1; перехід на pom_02h1, якщо не рівно

DOS_09h msg2; виклик макросу

jmp vvid_fname2; перехід на vvid_fname2

pom_02h1:

cmp ax,03h; путь не найден

jne pom_03h1; перехід на pom_03h1, якщо не рівно

DOS_09h msg3; виклик макросу

jmp vvid_fname2; перехід на vvid_fname2

pom_03h1:

cmp al,04h; слишком много откритих файлов

jne pom_04h1; перехід на pom_04h1, якщо не рівно

DOS_09h msg4; виклик макросу

jmp vvid_fname2; перехід на vvid_fname2

pom_04h1:

cmp al,0ch; неправильний режим доступу

jne pom_0ch1; перехід на pom_0сh1, якщо не рівно

DOS_09h msg6; виклик макросу

jmp vvid_fname2; перехід на vvid_fname2

pom_0ch1:

; ЧИТАННЯ ФАЙЛУ 2

mov ah,3fh; функція читання файлу

mov bx,handle; дескриптор

mov cx,6250; кількість читання байтів

mov dx,offset buf2; адрес buf2

int 21h; виклик DOS

mov mak_buf2,ax; кількість реально прочитали

 

; ПОРІВНЯННЯ НА РІВНІСТЬ

mov si,offset buf1; адрес buf1

mov di,offset buf2; адрес buf2

cld; встановлення прапорця DF

mov cx,mak_buf1; число повторень

repe cmpsb

jne nem; перехід, якщо не рівно

DOS_09h msg12; виклик макросу

mov ah,08h; функція введення символа

int 21h; виклик DOS

nem:

 

; ЗАНЕСЕННЯ ПРОБІЛУ

mov si,mak_buf1; si присвоюємо кількість прочитаних елементів файлу 1

inc si; інкремент si

mov buf1+si,' '; у кінець буфера buf1 заносимо пробіл

mov si,mak_buf2; si присвоюємо кількість прочитаних елементів файлу 2

inc si; інкремент si

mov buf2+si,' '; у кінець буфера buf2 заносимо пробіл

 

mov si,0; обнулення si

mov cx,6250; кількість циклів

loop23: mov al,buf1+si; в al заносимо елемент буфера

mov buf1vel+si,al; в буфер заносимо значення al

mov ah,buf2+si; в ah заносимо елемент буфера

mov buf2vel+si,ah; в буфер заносимо значення ah

inc si; інкремент si

loop loop23; команда циклу із cx кроків

 

fon 0,0,79,24,01110001b; виклик макросу

koordun 0,0; виклик макросу

DOS_09h msg; виклик макросу

koordun 0,0; виклик макросу

DOS_09h msg11; виклик макросу

fon 0,1,79,1,01110001b; виклик макросу

koordun 0,1; виклик макросу

DOS_09h msg13; виклик макросу

koordun 25,2; виклик макросу

DOS_09h fname1; виклик макросу

koordun 25,13; виклик макросу

DOS_09h fname2; виклик макросу

koordun 3,25; виклик макросу

;DOS_09h msg9; виклик макросу

fon 3,24,4,24,00100000b; виклик макросу

fon 17,24,18,24,01010000b; виклик макросу

koordun 29,24; виклик макросу

BIOS_09h 9,01110010b; виклик макросу

koordun 47,24; виклик макросу

BIOS_09h 13,01110010b; виклик макросу

koordun 48,24; виклик макросу

BIOS_09h 10,01110010b; виклик макросу

 

jmp dal

; РОБОТА З ПРОПИСИМИ БУКВАМИ

F8:

fon 0,0,79,24,01110001b; виклик макросу

koordun 0,0; виклик макросу

DOS_09h msg; виклик макросу

koordun 0,0; виклик макросу

DOS_09h msg11; виклик макросу

fon 0,1,79,1,01110001b; виклик макросу

koordun 0,1; виклик макросу

DOS_09h msg13; виклик макросу

koordun 25,2; виклик макросу

DOS_09h fname1; виклик макросу

koordun 25,13; виклик макросу

DOS_09h fname2; виклик макросу

koordun 3,24; виклик макросу

DOS_09h msg9; виклик макросу

fon 3,24,4,24,00100000b; виклик макросу

fon 17,24,18,24,01010000b; виклик макросу

koordun 29,24; виклик макросу

BIOS_09h 9,01110010b; виклик макросу

koordun 47,24; виклик макросу

BIOS_09h 13,01110010b; виклик макросу

koordun 48,24; виклик макросу

BIOS_09h 10,01110010b; виклик макросу

 

cmp H,0; порівняння з 0

je H0; перехід, якщо рівно

jmp no_H0; перехід

H0:

fon 0,1,79,1,01110001b; виклик макросу

koordun 0,1; виклик макросу

DOS_09h msg13; виклик макросу

mov si,0; обнулення si

mov cx,6250; кількість циклів

loop21: mov al,buf1vel+si; в al заносимо елемент буфера

mov buf1+si,al; в буфер заносимо значення al

mov ah,buf2vel+si; в ah заносимо елемент буфера

mov buf2+si,ah; в буфер заносимо значення ah

inc si; інкремент si

loop loop21; команда циклу із cx кроків

no_H0:

 

cmp H,1; порівняння з 1

je H1; перехід, якщо рівно

jmp no_H1; перехід

H1:

fon 0,1,79,1,01110001b; виклик макросу

fon 1,1,29,1,01100001b; виклик макросу

koordun 0,1; виклик макросу

DOS_09h msg13; виклик макросу

mov si,0; обнулення si

mov cx,6250; кількість циклів

loop14: mov al,buf1+si; в al заносимо елемент буфера

mov buf1vel+si,al; в буфер заносимо значення al

mov ah,buf2+si; в ah заносимо елемент буфера

mov buf2vel+si,ah; в буфер заносимо значення ah

inc si; інкремент si

loop loop14; команда циклу із cx кроків

 

mov cx,mak_buf1; кількість циклів

mov si,0; обнулення si

loop15: mov al,buf1+si; в al заносимо елемент буфера

cmp al,'a'; менше "а"

jb loop16; перехід, якщо менше

cmp al,'z'; більше "z"

ja loop16; перехід, якщо більше

sub al,20h; віднімання 20h

mov buf1+si,al; в буфер заносимо значення al

loop16: inc si; інкремент si

loop loop15; команда циклу із cx кроків

 

mov cx,mak_buf2; кількість циклів

mov si,0; обнулення si

loop17: mov al,buf2+si; в al заносимо елемент буфера

cmp al,'a'; менше "а"

jb loop18; перехід, якщо менше

cmp al,'z'; більше "z"

ja loop18; перехід, якщо більше

sub al,20h; віднімання 20h

mov buf2+si,al; в буфер заносимо значення al

loop18: inc si; інкремент si

loop loop17; команда циклу із cx кроків

no_H1:

 

dal:

 

pov4:

mov ah,08h; функція введення символу

int 21h; виклик DOS

cmp al,44h; нажата клавіша F10

jne no2_vuxit; перехід, якщо не рівно

jmp vuxit

no2_vuxit:

cmp al,42h; нажата клавіша F8

jne no_F8; перехід, якщо не рівно

cmp H,1; порівняння з 1

je H_1; перехід, якщо рівно

mov H,1; присвоєння Н 0

jmp F8; перехід

H_1:

mov H,0; порівняння з 0

jmp F8

no_F8:

cmp al,3Fh; порівняння з клавішею "F5"

je F5; перехід, якщо не рівно

jmp no_F5; ПОРІВНЯННЯ BUF1 З BUF2

F5:

fon 0,0,79,0,01110001b; виклик макросу

fon 1,0,21,0,01100001b; виклик макросу

koordun 0,0; виклик макросу

DOS_09h msg11; виклик макросу

 

bufk_01110101

mov si,0; обнулення si

mov di,0; обнулення di

; занесення слова в буфер slovo

pov:

mov al,buf1+si; в al заносимо si-товий елемент масива buf1

cmp al,' '; якщо al рівне пробілу перехід на мітку vux

je vux; перехідб якщо рівне

mov slovo+di,al; в di-товий елемент масива slovo заносимо al

inc si; інкремент si

inc di; інкремент di

jmp pov

vux:

mov n_si,si; збереження si

mov n_di,di; збереження di

 

mov bx,0; обнулення bx

; знаходження подібного елемента

mov cx,mak_buf2; кількість циклів

loop7: push cx; збереження CX у стеці

mov al,buf2+bx; в al заносимо елемент буфера

cmp slovo,al; порівняння першого елемента буфера slovo з al

jne ne_ri; перехід, якщо не рівне

mov si,offset buf2; адрес buf2

mov cx,bx; кількість циклів

loop8: push cx; збереження CX у стеці

inc si; інкремент si

pop cx; взяття із стеку cx

loop loop8; команда циклу із cx кроків

mov di,offset slovo; адрес clovo

cld; встановлення прапорця DF

mov cx,n_di; кількість циклів

repe cmpsb; стрічкова команда порівняння

jne no; перехід, якщо не рівно

mov si,bx; занесення в si значення bx

mov cx,n_di; кількість циклів

loop9: push cx; збереження CX у стеці

mov buf2k+si,01110010b; занесення кольору

inc si; інкремент si

pop cx; взяття із стеку cx

loop loop9; команда циклу із cx кроків

no:

ne_ri:

inc bx; інкремент si

pop cx; взяття із стеку cx

loop loop7; команда циклу із cx кроків

mov si,n_si; присвоєння значення n_si

inc si; інкремент si

inc si; інкремент si

cmp si,mak_buf1

jae wap; перехід, якщо більше або рівне

dec si; декремент si

mov di,0; обнулення di

jmp pov; перехід на pov

wap:

; ПОРІВНЯННЯ BUF2 З BUF1

mov si,0; обнулення si

mov di,0; обнулення di

pov1:; занесення слова в буфер slovo

mov al,buf2+si; в al заносимо si-товий елемент масива buf1

cmp al,' '; якщо al рівне пробілу перехід на мітку vux

je vux1; перехідб якщо рівне

mov slovo+di,al; в di-товий елемент масива slovo заносимо al

inc si; інкремент si

inc di; інкремент di

jmp pov1; перехід на pov1

vux1:

mov n_si,si; збереження si

mov n_di,di; збереження di

 

mov bx,0; обнулення bx

mov cx,mak_buf1; знаходження подібного елемента

loop11: push cx; збереження CX у стеці

mov al,buf1+bx; в al заносимо елемент буфера

cmp slovo,al; порівняння першого елемента буфера slovo з al

jne ne_ri1; перехід, якщо не рівне

mov si,offset buf1; адрес buf2

mov cx,bx; кількість циклів

loop12: push cx; збереження CX у стеці

inc si; інкремент si

pop cx; взяття із стеку cx

loop loop12; команда циклу із cx кроків

mov di,offset slovo; адрес clovo

cld; встановлення прапорця DF

mov cx,n_di; кількість циклів

repe cmpsb; стрічкова команда порівняння

jne no1; перехід, якщо не рівно

mov si,bx; занесення в si значення bx

mov cx,n_di; кількість циклів

loop13: push cx; збереження CX у стеці

mov buf1k+si,01110010b; занесення кольору

inc si; інкремент si

pop cx; взяття із стеку cx

loop loop13; команда циклу із cx кроків

no1:

ne_ri1:

inc bx; інкремент bx

pop cx; взяття із стеку cx

loop loop11; команда циклу із cx кроків

 

mov si,n_si; занесення в si значення n_si

inc si; інкремент si

inc si; інкремент si

cmp si,mak_buf2

jae p1; перехід, якщо більше або рівне

dec si; декремент si

mov di,0; обнулення di

jmp pov1; перехід на pov1

p1:

jmp wux; перехід на wux

no_F5:

 

cmp al,40h; порівняння з клавішею "F6"

jne no_F6; перехід, якщо не рівне

; ПОРІВНЯННЯ ПО ЕЛЕМЕНТУ

F6:

fon 0,0,79,0,01110001b; виклик макросу

fon 24,0,50,0,01100001b; виклик макросу

koordun 0,0; виклик макросу

DOS_09h msg11; виклик макросу

 

bufk_01110101

mov si,0; обнулення si

mov cx,6250; кількість циклів

vuvid: mov al,[buf1+si]; в al заносимо елемент буфера

mov bl,[buf2+si]; в bl заносимо елемент буфера

cmp al,bl; опрівняння al з bl

jne ne_rivhi; перехід, якщо не рівні

mov [buf1k+si],01110010b; занесення кольору

mov [buf2k+si],01110010b; занесення кольору

ne_rivhi:

inc si; інкремент si

loop vuvid; команда циклу із cx кроків

jmp wux; перехід на wuv

no_F6:

jmp pov4; перехід на pov4

 

wux:

 

; Виведення на екран першої сторіеки 1 вікна

mov y1,3

mov x1,4

mov y2,14

mov x2,4

mov si,0; обнулення si

mov cx,675; кількість циклів

loop1: push cx; збереження CX у стеці

koordun x1,y1; виклик макросу

BIOS_09h buf1vel+si,buf1k+si; виклик макросу

cmp x1,78; порівняння з 78

jne x1_78; перехід, якщо не рівно

mov x1,3; присвоєння 3

inc y1; інкремент y1

x1_78:

inc x1; інкремент x1

inc si; інкремент si

pop cx; взяття із стеку cx

loop loop1; команда циклу із cx кроків

; виведення номера сторінки у верхнє вікно

mov n,30h; присвоєння 30h

koordun 2,11; присвоєння 30h

BIOS_09h n,01110001b; виклик макросу

 

; Виведення на екран першої сторіеки 2 вікна

mov di,0; обнулення si

mov cx,675; кількість циклів

loop2: push cx; збереження CX у стеці

koordun x2,y2; виклик макросу

BIOS_09h buf2vel+di,buf2k+di; виклик макросу

cmp x2,78; порівняння з 78

jne x2_78; перехід, якщо не рівно

mov x2,3; присвоєння 3

inc y2; інкремент y2

x2_78:

inc x2; інкремент x2

inc di; інкремент di

pop cx; взяття із стеку cx

loop loop2; команда циклу із cx кроків

; виведення номера сторінки у нижнє вікно

mov m,30h; присвоєння 30h

koordun 2,22; виклик макросу

BIOS_09h m,01110001b; виклик макросу

 

 

; ПРОКРУТКА ВІКОН

mov di,675; di присвоїти 675

mov si,675; di присвоїти 675

win1:

push si; збереження si у стеці

; виведення повідомлення у верхньому вікні

mov y1,3

mov x1,2

storinka x1,y1,10011101b; виклик макросу

; виведення повідомлення у нижнє вікні

mov y1,14

mov x1,2

storinka x1,y1,01111101b; виклик макросу

pop si; взяття із стеку si

 

mov ah,10h; функція читання символа з клавіатури з очікуванням

int 16h; виклик BIOS

 

cmp ah,3fh; нажата клавіша "F5"

jne no1_F5

jmp F5

no1_F5:

 

cmp ah,40h; нажата клавіша "F6"

jne no1_F6

jmp F6

no1_F6:

 

cmp ah,42h; нажата клавіша "F8"

jne no1_F8

cmp H,1

je H1_1

mov H,1

jmp F8

H1_1:

mov H,0

jmp F8

no1_F8:

 

; ПРОКРУТКА ДЛЯ ВЕРХНЬОГО ВІКНА

cmp ax,50e0h; нажата клавіша "вниз"

jne F1; перехід, якщо не рівно

; прокрутка вершнього вікна вниз

cmp si,mak_buf1; порівнянн si з mak_buf1

jb n_win1

jmp win1

n_win1:; перхід, якщо більше або рівне

cmp si,0; порівняння si з 0

jne no_nen; перехід, якщо не рівне

mov si,675; si присвоїти 675

no_nen:

 

mov y1,3

mov x1,4

mov cx,675; кількість циклів

loop3: push cx; збереження CX у стеці

koordun x1,y1; виклик макросу

BIOS_09h buf1vel+si,buf1k+si; виклик макросу

cmp x1,78; порівняння з 78

jne x1_78dr; перехід, якщо не рівне

mov x1,3; присвоєння 3

inc y1; інкремент y1

x1_78dr:

inc x1; інкремент x1

inc si; інкремент si

pop cx; взяття із стеку cx

loop loop3; команда циклу із cx кроків

inc n; виведення номера сторінки

koordun 2,11; виклик макросу

BIOS_09h n,01110001b; виклик макросу

F1:

 

cmp ax,48e0h; нажата клавіша "вверх"

jne F2; перехід, якщо не рівне

; прокрутка вершнього вікна вгору

sub si,1350; від si відняти 1350

cmp si,0; порівняння з 0

jnl no_vid; перехід, якщо менше

mov si,0; обнулення si

jmp win1; перехід на win1

no_vid:

mov y1,3

mov x1,4

mov cx,675; кількість циклів

loop4: push cx; збереження CX у стеці

koordun x1,y1; виклик макросу

BIOS_09h buf1vel+si,buf1k+si; виклик макросу

cmp x1,78; порівняння з 78

jne x1_78dr1; перехід, якщо не рівне

mov x1,3; присвоєння 3

inc y1; інкремент y1

x1_78dr1:

inc x1; інкремент x1

inc si; інкремент si

pop cx; взяття із стеку cx

loop loop4; команда циклу із cx кроків

; виведення номера сторінки

dec n; декремент n

koordun 2,11; виклик макросу

BIOS_09h n,01110001b; виклик макросу

F2:

 

cmp ax,0f09h; нажата клавіша Tab

je win2; перехід, якщо рівно

 

cmp ax,4400h; нажата клавіша F10

jne no_vuxit; перехід, якщо рівно

jmp vuxit; перехід на vuxit

no_vuxit:

jmp win1; перехід на win1

 

win2:

push si; збереження si у стеці

; виведення повідомлення у верхньому вікні

mov y1,3

mov x1,2

storinka x1,y1,01111101b; виклик макросу

; виведення повідомлення у нижнє вікні

mov y1,14

mov x1,2

storinka x1,y1,10011101b; виклик макросу

pop si; взяття із стеку si

 

mov ah,10h; функція читання символа з клавіатури з очікуванням

int 16h; виклик BIOS

 

cmp ah,3fh; нажата клавіша "F5"

jne no2_F5

jmp F5

no2_F5:

 

cmp ah,40h; нажата клавіша "F6"

jne no2_F6

jmp F6

no2_F6:

 

 

cmp ah,42h; нажата клавіша "F8"

jne no2_F8

cmp H,1

je H2_1

mov H,1

jmp F8

H2_1:

mov H,0

jmp F8

no2_F8:

 

; ПРОКРУТКА ДЛЯ НИЖНЬОГО ВІКНА

cmp ax,0f09h; нажата клавіша Tab

jne no_win3

jmp win1

no_win3:

cmp ax,50e0h; нажата клавіша "вниз"

jne F3; перехід, якщо не рівне

; прокрутка нижнього вікна вниз

cmp di,mak_buf2; порівнянн di з mak_buf2

jae F3; перхід, якщо більше або рівне

cmp di,0; порівняння з 0

jne no_buf2; перехід, якщо не рівне

mov di,675; присвоєння di

no_buf2:

 

mov y2,14

mov x2,4

mov cx,675; кількість циклів

loop3buf2: push cx; збереження CX у стеці

koordun x2,y2; виклик макросу

BIOS_09h buf2vel+di,buf2k+di; виклик макросу

cmp x2,78; порівняння з 78

jne x2_78buf2; перехід, якщо не рівне

mov x2,3; присвоєння 3

inc y2; інкремент y2

x2_78buf2:

inc x2; інкремент x2

inc di; інкремент di

pop cx; взяття із стеку cx

loop loop3buf2; команда циклу із cx кроків

; виведення номера сторінки

inc m; інкремент m

koordun 2,22; виклик макросу

BIOS_09h m,01110001b; виклик макросу

 

F3:

 

cmp ax,48e0h; нажата клавіша "вверх"

jne F4; перехід, якщо не рівне

; прокрутка вершнього вікна вгору

sub di,1350; від di відняти 1350

cmp di,0; порівняння з 0

jnl no_vid_buf2; перехід, якщо менше

mov di,0; обнулення di

jmp win2; перехід ан win2

no_vid_buf2:

mov y2,14

mov x2,4

mov cx,675; кількість циклів

loop4buf2: push cx; збереження CX у стеці

koordun x2,y2; виклик макросу

BIOS_09h buf2vel+di,buf2k+di; виклик макросу

cmp x2,78; порівняння з 78

jne x2_78dr1; перехід, якщо не рівне

mov x2,3; присвоєння 3

inc y2; інкремент y2

x2_78dr1:

inc x2; інкремент x2

inc di; інкремент di

pop cx; взяття із стеку cx

loop loop4buf2; команда циклу із cx кроків

; виведення номера сторінки

dec m; декремент m

koordun 2,22; виклик макросу

BIOS_09h m,01110001b; виклик макросу

 

F4:

 

cmp ax,4400h; нажата клавіша F10

je vuxit; перехід, якщо рівно

 

jmp win2; перехід на win2

 

 

vuxit:

mov ah, 04Ch; функція успішного завершення програми

mov al, [exCode]; код 0 успішного завершення

int 21h; виклик DOS

END Start; кінещь програми із точкою входу

 

 





Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 287; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.418 сек.