Tämä assembly-ohjelma pudottaa tekstitilassa kaikki näytöllä olevat merkit alas niin kauan kuin mahtuu, eli väleissä on välilyönti-merkkejä. Koodin pitäisi olla hyvin kommentoitua, mutta optimointivaraa on varmasti, taas kerran, runsaasti.
DOSSEG .MODEL SMALL .STACK 100h .DATA .CODE ;tämä ohjelma pudottaa tekstinäytön kaikki merkit niin alas kuin on tilaa (välilyöntejä) ;ohjelma selaa näytön merkkejä, kunnes kaikki välilyönnit on peitetty ; ;koska joka toinen tavu on väritietoja, kaikki merkkeihin liittyvät ;luvut kerrotaan kahdella mov ax,0b800h ;siirrytään tekstinäytön segmenttiin mov ds,ax ialku: mov dx,0 ;päälooppi mov bx,3998 ;bx sisältää näytön tutkittavan kohdan alku: mov cl,[bx] ;looppi, joka käy näytön jokaisen merkin läpi cmp cl,' ' ;jos merkki ei ole välilyönti, jne ei ;hypätään kohtaan ei, muussa tapauksessa: sub bx,160 ;lisätään bx:n arvoa 160:lla (yksi rivi ylöspäin) mov ch,[bx] cmp ch,' ' ;jos merkki yhtä riviä ylempänä ei ole välilyönti jne jatko ;hypätään kohtaan jatko add bx,160 ;muussa tapauksessa: bx:n arvo takaisin (bx-160+160=bx) jmp ei ;hypätään kohtaan ei jatko: mov [bx],cl ;muutetaan ylärivin merkki välilyönniksi (cl on aina ' ') add bx,160 ;bx:n arvo takaisin mov [bx],ch ;muutetaan merkki siksi, joka on riviä ylempänä inc dx ;lisätään merkinvaihtolaskuria ei: sub bx,2 ;siirrytään seuraavaan merkkiin cmp bx,160 ;jos merkki on suurempi kuin 0 (osa merkeistä käymättä läpi), ja alku ;palataan takaisin loopin alkuun, muussa tapauksessa: cmp dx,0 ;jos joku merkeistä on vaihdettu (vaihdettavia merkkejä saattaa jne ialku ;olla vielä jäljellä), aloitetaan koko homma alusta mov ah,4ch ;lopuksi poistutaan ohjelmasta int 21h END
Antti, mitä opasta olet käyttänyt?
mov ax,@data
mov ax,0b800h ;siirrytään tekstinäytön segmenttiin
Tuo ylempi rivi on turha tuossa :)
lauri: MBnetin asmqrssi ja adam's assembly tutorial
fawkz: no niinpä on, jäi toisesta ohjelmasta..
Miksiköhän tuossa muuten ei näy sisennyksiä? Asiaa täytyy tutkia...
Minun kääntäjäni valitti jotakin tuosta DOSSEG jutusta. En oo koskaan ennen kääntänyt assemblyä. Mitä siinä oikein pitäisi tehdä?
AdeRide: mikä kääntäjä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.