> > Hmm. nie znam sie na asm za bardzo (kodujê w C/C++), > ale nasuwa mi siê pewne rozwi±zanie. > Mo¿e spróbuj przechowywaæ w jakiej¶ zmiennej (w > pamiêci RAM, a nie w rejestrze > procesora) adres do jednej funkcji (czê¶ci kodu, > która siê normalnie wykonuje) a w innej > zmiennej adres do innej funkcji (czê¶ci kodu, która > ma byæ podstawiona zamiast tej domy¶lnej). > Potem je¶li w pewnym momencie programu chcesz ¿eby > wykona³a siê inna funkcja ni¿ domy¶lna, > wystarczy ¿e podmienisz adresy w wywo³aniu funkcji. > U¿ywam terminu "funkcja" ale mam na my¶li dowolny > kawa³ek kodu. > Mniej wiêcej wygl±da³o by to tak: > > ... > wskaznik_do_funkcji_domyslnej: > <kod funkcji domyslnej> > ret > ... > wskaznik_do_funkcji_zastepczej: > <kod funkcji zastepczej> > ret > ... > zmienna_przechowujaca_do_funkcji = > wskaznik_do_funkcji_domyslnej (<-to jako definicja > globalnej zmiennej) > ... > > potem w kodzie programu, w miejscu gdzie wywolujesz > funkcjê: > > call zmienna_przechowujaca_do_funkcji > > a jesli chcesz zmenic wywo³ywan± funkcjê (np. po > wci¶niêciu jakiego¶ klawisza) to piszesz: > > zmienna_przechowujaca_do_funkcji = > wskaznik_do_funkcji_zastepczej > > gdy chcesz wróciæ do domy¶lnej funkcji: > > zmienna_przechowujaca_do_funkcji = > wskaznik_do_funkcji_domyslnej > > > Mniej wiêcej tak siê to rozwi±zuje w C/C++ - u¿ywa > siê tam po prostu wska¼ników do funkcji > (które s± definiowanym przez programistê typem > zmiennej), a je¶li idzie to zrobiæ w jêzyku > wysokiego poziomu to znaczy ¿e w asm na pewno. Tylko > nie mam pojêcia czy jest to realizowane > w przedstawiony przeze mnie sposób;) > > Tomek
Dziêki za odpowied¼. Twój pomys³ jest niez³y jednak mi przedewszystkim zale¿y na szybko¶ci operacji, a co za tym idzie ograniczenia korzystania z pamiêci (z poza prcesora) do minimum ( oczywi¶cie s± komendy przesuwaj±ce odpowiednie bloki do pamiêci do cache ale moja znajomo¶æ assemblera niesiêga jeszcze tak daleko i narazie tylko z nimi eksperymentuje). Mozna by równie¿ zmeniaæ rejestr %eip wskazujêcy na kolejn± wykonywana instrukcjê ..ale to równie¿ wi±¿e sie z korzystniem ze stosu. np. w programie z podanych z zewn±trz danych obliczam ile razy ( 0<n<5 'n' naturalne ) powinienem obrocic cyklicznie podwojne slowa w rejestrze %xmm0, za³u¿my ¿e w %al otrzymuje 2*n, w %bl binarnie 0b11100100=x03020100, teraz jezeli móg³bym pisac bezpo¶rednio do programu wystarczy ze zrobie 1) rorb %al,%bl #obracam rz±dan± ilosæ razy %bl 2) movb %bl,.+n # zastap $1 3) shufs $1,%xmm0,%xmm0 moglbym oczywiscie w zalezno¶ci od wyniku w %al ustawiac adres skoku do procedury z ustalonym parametrem przestawienia dla shufs ale wiaze sie to z instrukcjami prownanwczymi ( chociaz tego mozna uniknac) no i odwolaniem do pamieci, co ma znaczenie kiedy podobne operacje dla ro¿nych 'n' wykonuje 2^1000 razy. A nawet gdyby mo¿na by³o napisaæ inn± szybszê instrukcjê ( nie twierdzê ¿e nie mo¿na :) ) to z samej ciekawo¶ci chcia³êbym umieæ dowolnie manipulowaæ programem :) Pozdrawiam Lukas __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]