Thread View: pl.comp.lang.asm
13 messages
13 total messages
Started by =?ISO-8859-2?Q?A
Fri, 16 Apr 2010 00:23
Nie zagadka, tylko pytanie
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 00:23
Date: Fri, 16 Apr 2010 00:23
14 lines
766 bytes
766 bytes
Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy na starszym badziewiu? Konkretnie problem jest taki: jest program DOSowy, ma ju� ze 25 lat, jest troch� rozwijany. Niekt�rzy ludzie maj� jeszcze 486, s� nawet dwa 386DX40. Ja chcia�bym u�y� instrukcji RDTSC, oczywi�cie pod warunkiem, �e procesor takow� posiada (konkretnie chodzi o reimplementacj� funkcji Delay() w Turbo Pascalu - gdy nie b�dzie RDTSC, wykonany zostanie klasyczny wariant z p�tl� programow� przerobion� na 32 bity, �eby unikn�� b��du 200, znana sprawa). Je�li b�die mo�na u�y� RDTSC, to b�dzie lepiej, bo Delay() b�zie lizone w czasie rzeczywistym, a nie w czasie, kt�ry procesor po�wi�ci zadaniu.
Re: Nie zagadka, tylko pytanie
Author: Bernard
Date: Fri, 16 Apr 2010 08:09
Date: Fri, 16 Apr 2010 08:09
23 lines
1281 bytes
1281 bytes
On 2010-04-16 00:23, Andrzej Gra�y�ski wrote: > > Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy > na starszym badziewiu? > > Konkretnie problem jest taki: jest program DOSowy, ma ju� ze 25 lat, > jest troch� rozwijany. Niekt�rzy ludzie maj� jeszcze 486, s� nawet dwa > 386DX40. Ja chcia�bym u�y� instrukcji RDTSC, oczywi�cie pod warunkiem, > �e procesor takow� posiada (konkretnie chodzi o reimplementacj� funkcji > Delay() w Turbo Pascalu - gdy nie b�dzie RDTSC, wykonany zostanie > klasyczny wariant z p�tl� programow� przerobion� na 32 bity, �eby > unikn�� b��du 200, znana sprawa). Je�li b�die mo�na u�y� RDTSC, to > b�dzie lepiej, bo Delay() b�zie lizone w czasie rzeczywistym, a nie w > czasie, kt�ry procesor po�wi�ci zadaniu. Najpierw sprawdzamy, czy procesor ma CPUID (bit w EFLAGS). Je�li ma - dalej jest prosto. Je�li nie ma - mo�e to by� najwy�ej 486 i TSC nie ma na pewno. Istnieje ca�a masa test�w umo�liwaj�cych stwierdzenie typu <= 486 na podstawie zachowa� procesora przy wykonaniu instrukcji. Niezale�nie od TSC istnieje jeszcze timer systemowy i zmienna timera (zlicza interwa�y ok. 55 ms) w pami�ci, dost�pna dla apikacji DOSowych.
Re: Nie zagadka, tylko pytanie
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 13:41
Date: Fri, 16 Apr 2010 13:41
97 lines
2189 bytes
2189 bytes
Bernard pisze: > On 2010-04-16 00:23, Andrzej Gra�y�ski wrote: >> >> Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy >> na starszym badziewiu? >> [CIACH] > > Najpierw sprawdzamy, czy procesor ma CPUID (bit w EFLAGS). Je�li ma - > dalej jest prosto. Je�li nie ma - mo�e to by� najwy�ej 486 i TSC nie ma > na pewno. Dzi�kuj�, ten test ju� znam. > Istnieje ca�a masa test�w umo�liwaj�cych stwierdzenie typu <= 486 na > podstawie zachowa� procesora przy wykonaniu instrukcji. To te� jest powszechnie znane, cho� teraz nie jest mi potrzebne. > Niezale�nie od TSC istnieje jeszcze timer systemowy i zmienna timera > (zlicza interwa�y ok. 55 ms) w pami�ci, dost�pna dla apikacji DOSowych. Oczywi�cie, i gdy nie by�o RDTSC to by� jednyn ysposob odmierzania czasu, cho� ma�o dok�adny. W Turbo Pascalu zaimplementowano programowo dok�adniejszy zegarek: kr�ci si� pewn� wzorcow� p�tl�, zlicza jej obroty mi�zy kolejnymi tylkni�ciami zegara pod adresem BIOS:$6C, a potem przelicza jedn� milisekund� na liczb� obrot� tej p�tli. To by�o dobre jeszcze dla 386, ale teraz jest do�� zawodne, bo: 1. W systemie wieloprogramowym p�tla kr�ci si� tylko wtedy, gdy zadanie ma przydzielony czas procesora 2. W nowszych procesorach czas jednego obrotu p�tli mo�e by� zr�nicowany, ze wzgl�du na mechanizmy optymalizacyjne (cacheowanie, potok rozkaz�w). W efekcie Delay(1000) nie zawsze daje jedn� sekund� oczekiwania. Te mankamenty znikn�, je�li zamiast programowej p�tli u�yjemy RDTSC: 1. czekamy, a� zmieni si� warto�� zegara BIOS:$6C 2. Odczytujemy RDTSC i zapisujemy do TSCSTART 3. czekamy, a� zmieni si� warto�� zegara BIOS:$6C 4. Odczytujemy RDTSC i zapisujemy do TSCSEND 5. Obliczamy liczb� tykni�� TSC na milisekund�: TSCPERMSEC = (TSCEND-TSCSTART)*(1193180/65536/1000) i odt�d mo�emy odmierza� interwa�y w czasie rzeczywistym. Delay(MSec:Word): TSCCOUNT := MSec * TSCPERMSEC; TSC <- RDTSC TSCEND <- TSC + TSCCOUNT-1 repeat TSC <- RDTSC until TSC >= TSCEND;
Re: Nie zagadka, tylko pytanie
Author: Wojciech =?ISO-8
Date: Fri, 16 Apr 2010 13:48
Date: Fri, 16 Apr 2010 13:48
8 lines
120 bytes
120 bytes
Andrzej Gra¿yñski <grazynsk@petex.com.pl> wrote: > [...] Pytanie takie: te programy dzia³aj± pod DOS-em? w.
Re: Nie zagadka, tylko pytanie
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 15:16
Date: Fri, 16 Apr 2010 15:16
12 lines
369 bytes
369 bytes
Wojciech Mu�a pisze: > Andrzej Gra�y�ski <grazynsk@petex.com.pl> wrote: > >> [...] > > Pytanie takie: te programy dzia�aj� pod DOS-em? > > w. Niekt�re pod DOSem+DPMI inne w oknie DOSowym Windows, niekt�re w DOSemu. 1 760 000 linii w Pascalu nie op�aca si� przerabia� na co� nowszego. Chodzi bez zarzutu, bez trudu daje si� rozbudowywa�.
Re: Nie zagadka, tylko pytanie
Author: Wojciech =?ISO-8
Date: Fri, 16 Apr 2010 15:35
Date: Fri, 16 Apr 2010 15:35
16 lines
536 bytes
536 bytes
Andrzej Gra¿yñski <grazynsk@petex.com.pl> wrote: > > Pytanie takie: te programy dzia³aj± pod DOS-em? > > Niektóre pod DOSem+DPMI inne w oknie DOSowym Windows, niektóre w DOSemu. > 1 760 000 linii w Pascalu nie op³aca siê przerabiaæ na co¶ nowszego. > Chodzi bez zarzutu, bez trudu daje siê rozbudowywaæ. Nie dlatego pyta³em. Gdyby dzia³a³y tylko pod DOS-em, to mo¿naby spróbowaæ przeprogramowaæ zegarek RTC, ¿eby tyka³ szybciej i tylko zczytywaæ jaki¶ globalny licznik. w.
Re: Nie zagadka, tylko pytanie
Author: Michal Schulz
Date: Fri, 16 Apr 2010 15:47
Date: Fri, 16 Apr 2010 15:47
33 lines
1127 bytes
1127 bytes
Andrzej Grażyński wrote: > W efekcie Delay(1000) nie zawsze daje jedną sekundę oczekiwania. Te > mankamenty znikną, jeśli zamiast programowej pętli użyjemy RDTSC: za to pojawia sie inne problemy. > 1. czekamy, aż zmieni się wartość zegara BIOS:$6C > > 2. Odczytujemy RDTSC i zapisujemy do TSCSTART > > 3. czekamy, aż zmieni się wartość zegara BIOS:$6C > > 4. Odczytujemy RDTSC i zapisujemy do TSCSEND > > 5. Obliczamy liczbę tyknięć TSC na milisekundę: > > TSCPERMSEC = (TSCEND-TSCSTART)*(1193180/65536/1000) > > i odtąd możemy odmierzać interwały w czasie rzeczywistym. Badz ostrozny. W niektorych procesorach RDTSC liczy cykle w rozny sposob. W przypadku procesorow obslugujacych SpeedStep (Intel) albo Cool'n'Quiet (AMD) rdtsc moze zliczac cykle zaleznie od tego, z jaka predkoscia pracuje CPU w danej chwili. Twoja petla kontrolna zmierzy sie na przyklad przy 800MHz, a pozniej np. CPU przelaczy sie na 1800MHz. Jezeli to mozliwe, uzyj timera z lokalnego APIC. Jest troche mniej dokladny (100MHz, na przyklad) ale za to niezalezny od predkosci taktowania CPU. -- Michal Schulz
Re: Nie zagadka, tylko pytanie
Author: "Bogdan (bogdro)
Date: Fri, 16 Apr 2010 17:26
Date: Fri, 16 Apr 2010 17:26
23 lines
1173 bytes
1173 bytes
W dniu 16.04.2010 00:23, Andrzej Gra�y�ski pisze: > > Jaki proponujecie spos�b sprawdzenia, czy progam chodzi na Pentium czy > na starszym badziewiu? > > Konkretnie problem jest taki: jest program DOSowy, ma ju� ze 25 lat, > jest troch� rozwijany. Niekt�rzy ludzie maj� jeszcze 486, s� nawet dwa > 386DX40. Ja chcia�bym u�y� instrukcji RDTSC, oczywi�cie pod warunkiem, > �e procesor takow� posiada (konkretnie chodzi o reimplementacj� funkcji > Delay() w Turbo Pascalu - gdy nie b�dzie RDTSC, wykonany zostanie > klasyczny wariant z p�tl� programow� przerobion� na 32 bity, �eby > unikn�� b��du 200, znana sprawa). Je�li b�die mo�na u�y� RDTSC, to > b�dzie lepiej, bo Delay() b�zie lizone w czasie rzeczywistym, a nie w > czasie, kt�ry procesor po�wi�ci zadaniu. http://rudy.mif.pg.gda.pl/~bogdro/dos/cpu_tut.htm -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: Nie zagadka, tylko pytanie
Author: =?UTF-8?B?QW5kcn
Date: Sat, 17 Apr 2010 00:06
Date: Sat, 17 Apr 2010 00:06
6 lines
233 bytes
233 bytes
> Jezeli to mozliwe, uzyj timera z lokalnego APIC. Jest troche mniej dokladny > (100MHz, na przyklad) ale za to niezalezny od predkosci taktowania CPU. > Ba, ale jak to zrobić, żeby aplikacja chodziła w oknie DOSowym WIndows?
Re: Nie zagadka, tylko pytanie
Author: =?ISO-8859-2?Q?A
Date: Sat, 17 Apr 2010 00:29
Date: Sat, 17 Apr 2010 00:29
6 lines
70 bytes
70 bytes
> > http://rudy.mif.pg.gda.pl/~bogdro/dos/cpu_tut.htm > Dzi�ki.
Re: Nie zagadka, tylko pytanie
Author: "Remek"
Date: Wed, 21 Apr 2010 11:22
Date: Wed, 21 Apr 2010 11:22
10 lines
196 bytes
196 bytes
U�ytkownik "Andrzej Gra�y�ski" napisa�: > �eby unikn�� b��du 200 Czy remedium nie jest kompilacja we Free Pascalu? Nie sprawdza�em. Czyta�em co� na ten temat. Remek
Re: Nie zagadka, tylko pytanie
Author: =?ISO-8859-2?Q?A
Date: Thu, 22 Apr 2010 09:34
Date: Thu, 22 Apr 2010 09:34
46 lines
825 bytes
825 bytes
Remek pisze: > U�ytkownik "Andrzej Gra�y�ski" napisa�: > >> �eby unikn�� b��du 200 > > Czy remedium nie jest kompilacja we Free Pascalu? Nie sprawdza�em. > Czyta�em co� na ten temat. > > Remek A zagwarantujesz mi, �e wszystko co do ka�dego szczeg�u chodzi tak samo? Oto prosty przyk�ad r�nicy: var W, M: Word; L: Longint; ... W = 5; M = 7; L := W-M; if L < 0 then begin { jeste�my we FreePascalu } end else begin { jeste�my w Turbo Pascalu } end; Takich kwiatk�w jest mn�stwo. Ryzyko zbyt du�e. Pomijaj�c ju� fakt, �e trzeba doprowadzi� kod do mo�liwo�ci skompilowania w FP. A w�tek obiektowy - uzale�nienie od konkretnego layoutu obiektu w BP7? Pewnie w FP jest zupe�nie inny. Wi�c nawet jak si� teoretycznie skompiluje...
Re: Nie zagadka, tylko pytanie
Author: =?ISO-8859-2?Q?A
Date: Thu, 22 Apr 2010 09:36
Date: Thu, 22 Apr 2010 09:36
14 lines
528 bytes
528 bytes
Remek pisze: > U�ytkownik "Andrzej Gra�y�ski" napisa�: > >> �eby unikn�� b��du 200 > > Czy remedium nie jest kompilacja we Free Pascalu? Nie sprawdza�em. > Czyta�em co� na ten temat. > > Remek A propos b��du 200 - to dzi� nie jest ju� problem. kto chce grzeba� w �r�d�ach CRT, sam sobie poradzi w ci�gu p� godziny. Kto nie chce, ma gotowe narz�dzie z Borlanda patchuj�ce EXEki. Mnie chodzi�o o co� zupe�nie innego - o jako tak� adekwatno�� odmierzanego czasu.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads