Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Assembly: DOS, assembly: kellon käsittely

tkok [26.06.2009 14:57:40]

#

Moi,

Kuinka saan ladattua muuttujaan dossin kelloajan?

Nasmia käytän.

Grez [26.06.2009 15:04:21]

#

Int 1A

Antti Laaksonen [26.06.2009 15:04:51]

#

Tuossa voisi olla hyvä keskeytys:

http://heim.ifi.uio.no/~stanisls/helppc/int_21-2c.html

Muoks: kellonaika, ei päivämäärä

tkok [26.06.2009 15:06:03]

#

Grez kirjoitti:

Int 1A

Johan löyty:
http://lrs.uni-passau.de/support/doc/interrupt-57/INT-1A.HTM
Kiitos hakusanasta :D

Edit: Tälläistä sain aikaan, luulettteko että joku kone on liian hidas suorittamaan 1000 kertaa sekunnissa tuon loopin?

Kello:					;säädetään ohjelman nopeutta
		push	ax		;tallennetaan rekisterit pinoon
		push	bx
		push	cx
		push 	dx
		mov		ah,2Ch	;halutaan dossin sekunttikellon tila
		int		21		;siirretään kello rekistereihin C ja D
		mov		byte	[nopeus],dl		;laitetaan väliaikaisesti nopeus muuttujaan sadasosasekunnit
		mov		cx,1000 ;alustetaan laskuri
Looppaa:
		nop		;tee ei mitään
		dec		cx		;vähennä laskuria
		cmp		cx,0	;vertaa
		ja		Looppaa	;hyppää jos laskuria on jäljellä
		int		21		;kun looppi loppuu otetaan uusi sadasosasekunttiaika
		mov		byte	dh,[nopeus]		;dh=vanha sekkariaika, dl=uusi sekkariaika
		mov		byte	[nopeus],0		;alustus
Laskenopeus:
		cmp		dh,dl	;if dh<dl 	-> nopeus=dl-dh
		ja		Pienempi;else 		-> nopeus=dh+100-dl
		add		byte	[nopeus],dl
		sub		byte	[nopeus],dh
		mov		byte	[nopeus],dh
		jmp		Peli
Pienempi:
		add		byte	[nopeus],dh
		add		byte	[nopeus],100
		sub		byte	[nopeus],dl
		mov		byte	[nopeus],dl

Peli:
		pop		dx
		pop		cx
		pop		bx
		pop		ax

tkok [26.06.2009 16:17:45]

#

Vaikutti sitltä että tää vanha konekkin on liian nopea suorittamaan tuota, ei ehdi kulua sadasosa sekuntia :P joten lisäsin looppeja, ja nyt vaikuttaa sopivammalta.

Metabolix [26.06.2009 16:56:13]

#

Voit tehdä testistä kaikille koneille sopivan: jos aikaa kuluu alle puoli sekuntia, kaksinkertaista kierrosten määrä ja tee testi uudestaan. Jokainen kone päätyy lopulta kierrosmäärään, jolla suoritus kestää yli puoli sekuntia, ja testi kestää silti yhteensä vain sekunnin. Testin lopuksi jossain rekisterissä on kierrosten määrä ja toisessa kulunut aika.

Vastaus

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

Tietoa sivustosta