.model tiny;small ;.stack 200h .data lclick dw 0741h rclick dw 0700h filename db "a.pic",0;255 dup(?) picture db 4000 dup(?) .code org 100h start: cld mov ax,0 mov cx,2000 mov di,offset picture rep stosw mov ax,0b800h mov es,ax call loadpic call picrestore ; mov ax,@data ; mov ds,ax xor ax,ax int 33h mov ax,1 int 33h main: mov ax,3 int 33h or bx,bx jz prockey call convmouse shl di,1 and bx,2 jnz short rightpress mov ax,ds:[lclick] jmp short putlet rightpress: mov ax,ds:[rclick] putlet: mov es:[di],ax prockey: mov ah,1 int 16h jz main xor ah,ah int 16h cmp al,27 jz done cmp ah,3dh jz getri cmp ah,3ch jnz main mov di,offset lclick jmp short doget getri: mov di,offset rclick doget: push di call picstore pop di call getnchoi call picrestore jmp main done: call picstore call savepic mov ax,4c00h int 21h convmouse: mov di,cx mov cl,3 shr di,cl shr dx,cl mov ax,dx mov cl,6 shl ax,cl dec cl dec cl shl dx,cl add dx,ax add di,dx ret getnchoi: push di mov cx,255 xor di,di xor al,al getnchoi1: mov es:[di],al inc al inc di mov es:[di],byte ptr 07h inc di loop getnchoi1 getnchoi2: mov ax,3 int 33h or bx,bx jz short getnchoi2 call convmouse mov bx,di mov al,bl push ax push ax xor ah,ah int 16h pop ax mov cx,255 xor di,di xor ah,ah getnchoi3: mov es:[di],ax inc ah inc di inc di loop getnchoi3 getnchoi4: mov ax,3 int 33h or bx,bx jz short getnchoi4 call convmouse mov bx,di pop ax mov ah,bl pop di mov ds:[di],ax xor ah,ah int 16h ret picstore: push ds mov cx,4000 ; mov ax,seg picture ; mov ds,ax xor si,si mov di,offset picture copy1: mov al,es:[si] mov ds:[di],al inc di inc si loop copy1 pop ds ret picrestore: push ds mov cx,4000 xor di,di ; mov ax,seg picture ; mov ds,ax mov si,offset picture copy2: mov al,ds:[si] mov es:[di],al inc di inc si loop copy2 pop ds ret savepic: ; mov ax,seg filename ; mov ds,ax mov cx,0 mov ah,3ch mov dx,offset filename int 21h ;fopen() jc error mov bx,ax mov cx,4000 ; mov ax,seg picture ; mov ds,ax mov dx,offset picture mov ah,40h ;write data int 21h mov ah,3eh ;close file int 21h error: ret loadpic: ; mov ax,seg filename ; mov ds,ax mov al,0 mov ah,3dh mov dx,offset filename int 21h ;open file jc error2 mov bx,ax mov cx,4000 ; mov ax,seg picture ; mov ds,ax mov dx,offset picture mov ah,3fh ;read data int 21h mov ah,3eh ;close file int 21h error2: ret end start