| Code: ;---------------------------------------------------- ; Программа слизывания текста с экрана | ; в режиме 80*25 при нажатии F1. | ; Считывание производится в файл C:\OUT. | ; Файл C:\OUT должен быть создан! | ;---------------------------------------------------- ; Чрезвычайно капризная программа ! | ;---------------------------------------------------- CODESG SEGMENT PARA 'CODE' ASSUME CS:CODESG,ds:codesg,ss:codesg ORG 100H BEGIN: JMP INIT ;------------- ДАННЫЕ ------------------------------- xmax equ 80 ymax equ 25 kbsave dd ? file db 'c:\out',0 handle dw ? pag db ? x db 0 y db 0 x_old db ? y_old db ? string db xmax dup(' ') db 13,10 job db 0 ;-------------TRRRRRRR------------------------ TRRR proc near in al,61h and al,11111110b or al,00000010b out 61h,al mov cx,1000 ll0: loop ll0 and al,11111101b out 61h,al ret TRRR endp ;------------ ПРЕРЫВАЮЩАЯ ПРОГРАММА ---------- INTER PROC near PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH DS PUSH ES PUSH BP PUSHF cmp job,1 jnz beg jmp exi beg: in al,60h ; port 60h, keybd scan or sw1 cmp al,59 ; -------F1-------- je otkr ; Jump if not equal jmp exit erro: jmp err ;---------------------------------------- otkr: mov job,1 in al,61h push ax or al,80h out 61h,al pop ax out 61h,al mov al,20h out 20h,al sti ;------- mov ax,cs mov ds,ax mov ah,3dh ; Открытие файла mov al,1 lea dx,file int 21h jc erro mov handle,ax ; Позициирование в конец файла mov ax,4202h mov bx,handle mov cx,0 mov dx,0 int 21h mov ah,0fh ; Чтение номера видеостраницы int 10h mov pag,bh ; Запомнить положение курсора mov ah,3 int 10h mov x_old,dl mov y_old,dh mov x,0 mov y,0 loo: mov ah,2 ; Установка курсора в (x,y) mov bh,pag mov dl,x mov dh,y int 10h mov ah,8 ; Чтение символа в al mov bh,pag int 10h mov bh,0 mov bl,x mov string[bx],al inc x call trrr cmp x,xmax jnz loo mov ah,40h ; Запись в файл mov bx,handle mov cx,xmax+2 lea dx,string int 21h jc err cmp ax,xmax+2 jne err mov x,0 inc y cmp y,ymax jnz loo jmp ex ;-------------------------------------------- err: int 10h in al,61h and al,11111110b mov bx,200 bee1: or al,00000010b out 61h,al mov cx,3000 l01: loop l01 and al,11111101b out 61h,al mov cx,3000 l11: loop l11 dec bx jnz bee1 ;---------------------------- ex: mov ah,3eh mov bx,handle int 21h mov ah,2 mov bh,pag mov dl,x_old mov dh,y_old int 10h ;-------------------------- mov job,0 POPF POP BP POP ES POP DS POP DI POP SI POP DX POP CX POP BX POP AX iret ;-------------------------- exit: mov job,0 exi: POPF POP BP POP ES POP DS POP DI POP SI POP DX POP CX POP BX POP AX jmp dword ptr cs:[kbsave] INTER ENDP ;------------ ИНИЦИАЛИЗАЦИЯ -------------------- INIT PROC NEAR CLI mov ah,35h mov al,9 int 21h mov word ptr kbsave,bx mov word ptr kbsave+2,es mov ah,25h mov al,9 mov dx,offset inter int 21h STI MOV DX,OFFSET INIT INT 27H ; Создание резидента INIT ENDP CODESG ENDS END BEGIN
| |