.MODEL TINY CODE SEGMENT ASSUME CS:CODE,DS:CODE org 100h MAIN: mov ah,0fh int 10h cbw push ax mov al,13h int 10h ; std ; pouziji obracene poradi rady a mohu tak vynechat nastaneni direction flagu cwd xor bx,bx mov cx,0ffffh mov si,offset diff2 mov es,[si] step: add dh,[si] ; inc si add cx,[si+2] part: mov ax,1010h int 10h inc bx test bl,03fh jnz step ; lodsb lodsw and bh,bh jz part xor cx,cx kresli: mov dx,320 ; hlavni posun mov di,1 ; vedlejsi posun mov ax,cx ; ax=abs(x0-x1).. mov bl,199 ; bx=D ; push cx ; test sudost ; shr cl,1 ; pop cx ; jnc sude test al,1 jz sude mov si,256 ; liche: dolu, hp=320, vp=1,-1, K=abs(x0-x1), D=199 sub ax,192 ; abs(x0-x1)=abs(256-(64+barva))=abs(192-barva) jnc cara ; skok pro x0>x1 - nastaveno neg di ; jinak je x0 pouziji jc misto jmp (je to o Byte kratsi) sude: ; nahoru, hp=-320,1, vp=1,-320, K=x1,199, D=199,x1 not al ; ax=255-cl=K neg dx ; dx=-320 mov si,63681 ; bod vlevo dole cmp al,bl jc cara ; skok pro (x1-x0)<199 - nastaveno xchg dx,di ; jinak prohod hp s vp a K s D xchg ax,bx ; xchg ch,cl cara: mov bp,ax ; bp=K, ax=prubezne mov ch,bl ; ch=D+1 inc ch cyklus: mov es:[si],cl add si,dx ; bod=bod+hp push bx ; bx/2 shr bl,1 cmp ax,bx ; ? ax>D/2 pop bx jl pokrac add si,di ; bod=bod+vp sub ax,bx ; prub=prub-D pokrac: add ax,bp dec ch jnz cyklus inc cl jnz kresli ; barva od 0 do 255, konec pri 256(=0) ; mov ah,8 ; int 21h int 16h ; ah = 0 pop ax int 10h ret diff2 db 0,0a0h,1,0,-1,-1,1,1,0,0 ;diff db 0,0,1,1,-1,-1,1,0,0,0a0h CODE ENDS END MAIN