Исходный код и сом-файл здесь Код (ASM): ; masm dos com # .286 .model tiny .code ClipX2 EQU 640 ClipY2 EQU 480 org 100h start: ;Semilla--------------------------------------------------------- mov ah, 0 ; CLOCK - GET TIME OF DAY int 1Ah ; Return: CX:DX = clock count ; AL = 00h if clock was read or written (via AH=0,1) since the previous ; midnight ; Otherwise, AL > 0 mov word_101CA, dx mov cx,37h push cs pop es mov si,offset word_101CA lea di,[si+1] mov bx,3DCDh @@: lodsw mul bx inc ax stosw loop @b mov word ptr [si],2Ah mov ax,12h int 10h ; - VIDEO - SET VIDEO MODE finit DrawFern: ; Propуsito : Dibuja una hoja de helecho ; Entrada : Ninguna ; Salida : Ninguna ; Destruye : Ninguna ;Randomization-------------------------------------------- mov bx,word_10238 inc bx cmp bx,37h jnz @f xor bx,bx @@: mov word_10238,bx lea ax,[bx+17h] mov dl,37h div dl shr ax,8 mov si,ax mov cx,word_101CA[si] lea ax,[bx+36h] div dl shr ax,8 mov si,ax add cx,word_101CA[si] mov word_101CA[bx], cx mov ax,10000 ; Rango mul cx ;-------------------------------------------------------------------- mov bx,7*2*3 ; Suponemos AX < 100 cmp dx,9300 jb Siguiente1 mov bx,7*2*0 jmp Final Siguiente1: cmp dx,8600 jb Siguiente2 mov bx,7*2*1 jmp Final Siguiente2: cmp dx,100 jb Final mov bx,7*2*2 Final: mov si,offset ParamFern+2 add si,bx mov di,offset x0 mov cx,6 rep movsw ; Xn = x0 + ((xu - x0)*x + (xv - x0)*y)/400 fild xu ; ST(0)=xu fisub x0 ; ST(0)=xu-x0 fmul X ; ST(0)=(xu-x0)*x fild xv ; ST(0)=xv fisub x0 ; ST(0)=xv-x0 fmul Y ; ST(0)=(xv-x)*y faddp st(1),st ; ST(0)=((xu - x0)*x + (xv - x0)*y) y Liberamos ST(1) fidiv const400 fiadd x0 ; Yn = y0 + ((yu - y0)*x + (yv - y0)*y)/400 fild yu fisub y0 fmul X fild Yv fisub y0 fmul Y faddp st(1), st fidiv const400 fiadd y0 ; x = Xn: y = Yn fst Y fchs ;st(0)=-Y fistp R2Tmp mov dx,R2Tmp fst X add dx,440 ; dx = 440 - Y fistp R2Tmp mov cx,R2Tmp add cx,10 ; cx = x + 10 ClipPixel: ; PSET (x + 10, 440 - y) ; Propуsito: Dibujamos un punto con recorte en (BX,DX) ; Entrada : BX, eje X; DX, eje Y; AL, color ; Salida : Ninguna ; Destruye : Ninguna ;IF (BX>0) && (BX<ClipX2) && (DX>0) && (DX<ClipY2) cmp cx, ClipX2 ; CX = column jnb @f cmp dx, ClipY2 ; DX = row jnb @f ; BH = 0 display page mov ax, 0C0Ah ; AH = 0Ch WRITE DOT ON SCREEN int 10h ; AL = color of dot @@: dec i jnz DrawFern xor ah,ah ; їQueremos salir? int 16h ; Si no pulsamos ninguna tecla mov ax,3 int 10h ; - VIDEO - SET VIDEO MODE ret ;-------------------------------------------------------------- i dw ClipX2*ClipY2 word_101CA dw 37h dup(?) word_10238 dw ? x0 dw ? y0 dw ? xu dw ? yu dw ? xv dw ? Yv dw ? const400 dw 400 X dd 200.0 Y dd 200.0 R2Tmp dw ? ParamFern dw 2, 184, 0, 124, 64, 333, 82 ; Primer valor es el color DW 2, 128, 34, 208, 103, 0, 122 ; Primer valor es el color DW 2, 24, 57, 364, 45, 45, 397 ; Primer valor es el color DW 2, 160, 0, 160, 0, 160, 64 ; Primer valor es el color end start