КАТЕГОРИИ: Архитектура-(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; Просмотров: 311; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |