Падающий снег в 3D Код (ASM): ; masm dos com # .model tiny .code .386 org 100h maxpix equ 5000 WIDTH_SCREEN equ 320 HEIGHT_SCREEN equ 200 SCREENSIZE equ WIDTH_SCREEN*HEIGHT_SCREEN IMPUT_STATUS_0 equ 3DAh ;регистр статуса ввода 0 VGA_SEGMENT equ 0A000h ftmp equ dword ptr [bp-4] tmp equ word ptr [bp-6] c_ equ byte ptr [bp-6-maxpix] s equ word ptr [bp-6-3*maxpix] start: enter 6+3*maxpix,0 mov ax,13h int 10h ; - VIDEO - SET VIDEO MODE mov ax,cs add ax,1000h mov gs,ax finit ; Инициализация снега mov si,maxpix xor ax,ax @@: xor ax,bx ;Random by Alexander Matchugovsky (2:5020/996.21) add ax,ax adc bx,0 xor bx,ax mov s[si],ax shr al,4 inc ax mov c_[si],al dec si jnz @b fldz ;stf=0 mainloop:push gs pop es;es=gs xor di,di xor eax,eax mov cx,SCREENSIZE/4 rep stosd mov si,maxpix @@: fld st; fld stf fsin movzx eax,byte ptr c_[si];ftmp=c[SI]*5; imul eax,5 mov ftmp,eax fmul ftmp fistp tmp mov ax, s[si] add tmp, ax ;tmp+=s[SI];DI=tmp; mov di, tmp mov al, c_[si] add al,15 ;AL=c[SI]+15; stosb ;GS:[DI]=AL; xor ax,ax mov al,c_[si] add ax,16 shr ax,3 imul ax,WIDTH_SCREEN add s[si], ax ;s[SI]+=((c[SI]+16)/8)*320; sub si,2 jnz @b fadd const005 ;stf+=0.05 mov dx,IMPUT_STATUS_0; тормозим вывод на экран до следующего кадра WaitVerticalSync:in al,dx test al,8 jz WaitVerticalSync WaitNotVerticalSync:in al,dx test al,8 jnz WaitNotVerticalSync push VGA_SEGMENT pop es xor di,di mov cx,SCREENSIZE/4 rep movs dword ptr es:[di],gs:[si] mov es,cx mov ax,es:[41Ah] sub ax,es:[41Ch]; было ли нажатие на клавиатуру? jz mainloop mov ax,3;восстанавливаем текстовый режим int 10h int 20h; выход из программы const005 dd 0.05 end start