nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 16:53



Reply to topic  [ 2 posts ] 
[ASM] Воруем текстовый экран в DOS 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Моя программа 1994 года - печатается без изменений:

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

_________________
:dj: https://mastodon.social/@Shaos


07 Aug 2006 17:13
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Была оригинальная утилита - Catcher в те же годы.
Могла грабить даже не весь экран а выделенную
часть его - причем в файл, на принтер и, если надо,
передать выделенное в командную строку.
Весьма неглюкава была - почему я её тогда и
декомпильнул - так сказать первый опыт.
Если зачем-то нужно - есть сорц.


28 Oct 2009 09:03
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 11 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.