Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Assembly: Merkkien pudotus -efekti

Antti Laaksonen [20.07.2002 08:54:43]

#

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

Lauri [21.07.2002 15:37:53]

#

Antti, mitä opasta olet käyttänyt?

thefox [21.07.2002 15:51:19]

#

mov ax,@data
mov ax,0b800h ;siirrytään tekstinäytön segmenttiin

Tuo ylempi rivi on turha tuossa :)

Antti Laaksonen [21.07.2002 18:51:25]

#

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...

AdeRide [10.12.2004 23:33:54]

#

Minun kääntäjäni valitti jotakin tuosta DOSSEG jutusta. En oo koskaan ennen kääntänyt assemblyä. Mitä siinä oikein pitäisi tehdä?

moptim [14.12.2006 20:08:09]

#

AdeRide: mikä kääntäjä?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta