Dokumentacio a Sprite.asm programhoz Feladat: Egy abra mozogjon a kepernyon, attol fuggoen, hogy a nyilakkal hogyan vezerli a felhasznalo. Kornyezet: Futtatashoz (inditashoz): MS DOS 6.2-es vagy avval kompatibilis operacios rendszer. Forditashoz: MASseMbler + ASCII tipusu szovegszerkeszto Inditasa: A neve (sprite.exe) leirasaval indul. Hibalehetoseg: Esetleg nem felel meg a kepernyofelbontas. Algoritmus: Adat szegmens xr:=320 yr:=200 ix:=0 ;A Sprite iy:=0 ;bal felso sarka tomb db 64 dup(?) ;atmeneti tarolo sprite db 0,7,0,7,0,7,0,7 db 7,0,15,15,0,0,0,0 db 0,0,0,15,15,0,0,7 db 7,0,0,8,8,8,0,0 db 0,0,8,8,1,1,1,7 db 7,0,8,8,1,1,1,0 db 0,0,0,8,8,8,0,7 db 7,0,7,0,7,0,7,0 maszk db 01010101b db 10110000b db 00011001b db 10011100b db 00111111b db 10111110b db 00011101b db 10101010b Adatok vege Stack szegments verem dw 256 dup(?) Stack vege Kod szegments Drawsprite eljaras ;ix,iy ponttol a sprite megjelenitese verembe cx verembe bx verembe ax bx:=a_maszk_kezdocime (offset) si:=offset( sprite) ax:=iy ;a sprite bal felso mul xr ;sarkanak pixelcime ax:=ax+ix di:=ax ;es:[di] <- keppont <- ds:[si] ha ds:[bx]<>0 cx:=8 kulso: ciklus al:=10000000b ah:=[bx] belso ciklus: test ah,al jz nincspont movsb ;ds:[si] -> es:[di] ugorj a "kovetkezo"-re nincspont: novel(si) novel(di) kovetkezo: shr al,1 jnc belso add di,xr sub di,8 inc bx loop kulso pop ax pop bx pop cx ret drawsprite endp restoreground proc ;hatter visszaallitasa push ax push cx mov si,offset array ;az atmeneti tarolo mov ax,iy ;a sprite altal takart hatter visszaallitasa mul xr add ax,ix mov di,ax ;es:[di] <- ds:[si] mov cx,8 r_kulso: push cx mov cx,8 rep movsb ;ds:[si] -> es:[di] add di,xr sub di,8 pop cx loop r_kulso pop cx pop ax ret restoreground endp saveground proc push cx push ax mov di,offset array mov ax,iy ;mentendo hatter mul xr add ax,ix mov si,ax mov ax,xr sub ax,8 push ds ;csere ds-es kozott push es pop ds pop es mov cx,8 s_kulso: push cx mov cx,8 rep movsb add si,ax pop cx loop s_kulso push ds push es pop ds pop es pop ax pop cx ret saveground endp start: mov ax,data ;adat szegmens regiszter mov ds,ax mov ax,stack ;stack szegmens regiszter mov ss,ax mov ax,0a000h ;grafikus kepernyo mov es,ax xor ah,ah mov al,13h ;320*200 mod-nak a beallitasa int 10h cld 0 ;direction bit, noveles si,di mov ax,30 mul xr ;(30,30) ponttol egy 100*50-es add ax,30 ;teglalap rajzolasa mov di,ax mov cx,50 line: push cx mov cx,100 mov al,14 ;sarga szinu szakasz rep stosb add di,xr sub di,100 pop cx loop line call saveground call drawsprite keypress: xor ax,ax int 16h ;billentyu leutesre var cmp al,27 ;ESC je vege cmp al,0 jne keypress cmp ah,72 ;fel je felfele cmp ah,80 ;le je lefele cmp ah,75 ;balra je balra cmp ah,77 ;jobbra je jobbra jmp keypress felfele: cmp iy,0 ;ha a tetejen van je nemmozgat call restoreground dec iy jmp mozgat lefele: mov ax,yr sub ax,8 cmp ax,iy ;ha az aljan vagyunk je nemmozgat call restoreground inc iy jmp mozgat balra: cmp ix,0 je nemmozgat call restoreground dec ix jmp mozgat jobbra: mov ax,xr sub ax,8 cmp ax,ix je nemmozgat call restoreground inc ix jmp mozgat mozgat: call saveground call drawsprite jmp keypress nemmozgat: jmp keypress vege: call restoreground xor ah,ah mov al,03 ;nem grafikus kepernyore vissza int 10h mov ax,4c00h int 21h code ends end start Az algoritmus vege --- A dokumentacio vege ---