Tämä Assembly-koodi sisältää kaksi aliohjelmaa näytön kuvan kääntämiseen pysty- ja vaakasuunnassa. Aliohjelma KaannaNayttoX kääntää näytön x-akselin suuntaisesti ylösalaisin, ja KaannaNayttoY kääntää y-akselin suuntaisesti. Koodin pitäisi olla melko hyvin kommentoitua.
Koodissa on optimointivaraa varmasti runsaasti, mutta siitä huolimatta kuva kääntyy jopa 486:lla melkein ilman viivettä.
;aliohjelma, joka vaihtaa kahden ruudulla olevan pisteen paikan VaihdaPiste proc x1:WORD, y1:WORD, x2:WORD, y2:WORD ;lasketaan ensimmäisen pisteen paikka näyttömuistissa mov ax,x1 mov bx,y1 mov dx,bx shl dx,8h shl bx,6h add bx,dx add bx,ax ;siirrytään näyttömuistiin mov ax,0a000h mov ds,ax ;cl = ensimmäisen pisteen väri, bx pinoon (1) mov cl,[bx] push bx ;lasketaan toisen pisteen paikka näyttömuistissa mov ax,x2 mov bx,y2 mov dx,bx shl dx,8h shl bx,6h add bx,dx add bx,ax ;siirrytään näyttömuistiin mov ax,0a000h mov ds,ax ;ch = toisen pisteen väri, ch:n paikkaan laitetaan cl:n väri mov ch,[bx] mov [bx],cl ;kohdassa (1) pinoon laitettu arvo palautetaan, ;cl:n paikkaan laitetaan ch:n väri pop bx mov [bx],ch ret VaihdaPiste endp ;näytön kääntäminen x-akselin suunnassa KaannaNayttoX proc ;näytön korkeus mov ax,0 mov bx,200 kkl: mov cx,0 knl: push ax ;pinoon... push bx push cx ;vaihdetaan pisteiden paikka invoke VaihdaPiste,cx,ax,cx,bx pop cx ;... ja takaisin pop bx pop ax ;suurennetaan cx, jos cx:n arvo on pienempi kuin 320 ;(näytön leveys), palataan knl-nimiöön inc cx cmp cx,320 jl knl ;suurennetaan ax, pienennetään bx, jos ax on pienempi ;kuin bx (ollaan alle puolivälissä), palataan kkl-nimiöön inc ax dec bx cmp ax,bx jl kkl ret KaannaNayttoX endp ;näytön kääntäminen y-akselin suunnassa KaannaNayttoY proc mov ax,0 mov bx,320 kkl: mov cx,0 knl: push ax push bx push cx invoke VaihdaPiste,ax,cx,bx,cx pop cx pop bx pop ax inc cx cmp cx,200 jl knl inc ax dec bx cmp ax,bx jl kkl ret KaannaNayttoY endp
Aihe on jo aika vanha, joten et voi enää vastata siihen.