Article View: pl.comp.lang.asm
Article #1791Re: Transpozycja tablicy w C & Asembler
From: Bogdan (bogdro)
Date: Mon, 14 Apr 2008 15:42
Date: Mon, 14 Apr 2008 15:42
68 lines
3980 bytes
3980 bytes
doles2@gmail.com pisze: > Główkowałem się nieco nad tym i napisałem coś takiego: > global transponuj > section .text [...] No, nawet ładnie to wyszło. Nie wygląda, aby nie działało, ale spytam: działa? :) >> Jak słusznie zauważyłeś, takie tryby adresowania nie istnieją, >> trzeba więc te adresy poskładać: >> EDX:EAX:=EAX*EDX >> EAX:=EAX+EBX // EDX odrzucamy >> push [esi+eax] >> >> Podobnie drugi. > Tutaj miałem niebotyczny problem, bo takie przeliczenie trzeba wykonać > przed "push dword [esi+eax*edx+ebx];" i przed "pop dword [edi+ebx*ecx > +eax];". Przed pierwszą operacją pobrania elementu z tablicy źródłowej > to tam pikuś, ale gorzej z drugą gdzie potrzebuję starych wartości EAX > i EBX z pętli a nie po obliczeniach. W związku z tym ja już sam > pisałem mało wiele podobny kod ale nie potrafiłem sobie poradzić > właśnie z przechowaniem wartości tych liczników :/ Nie wiem gdzie mam > zrobić PUSH i POP aby je jakoś zachować albo jest jeszcze inny sposób. Można wyliczone wartości dodać do ESI/EDI, zwalniając rejestry: mul edx add eax, ebx add esi, eax ; tu EAX już wolny push dword [esi] imul ebx,ecx add ebx,eax add edi, ebx ; tu EBX wolny pop dword [edi] Można włożyć na stos, można zachować do zmiennej. "Dword"-y dorobiłem w razie czego. > Liczyłem sobie na kartce to jeśli nie popełniłem błędu albo nie znam > jakiegoś triku, to niestety nie da się użyć policzonego EAX (tego dla > elementu macierzy źródłowej) w pobraniu elementu dla macierzy > docelowej. Co operację to trzeba liczyć od nowa :( Trudno. Prosty algorytm nie musi oznaczać wydajny algorytm. Kolega Jacek podał ciekawy algorytm (ale także działający tylko dla tablic dwuwymiarowych, nie dla tablic wskaźników na wiersze). >> Jeszcze tylko pozostaje dopowiedzieć w razie czego, że warunek w >> pętli for sprawdzany jest u góry i już masz gotowy algorytm. > Na początku nie wiedziałem o co Ci chodzi, ale potem załapałem. Trzeba > sprawdzać warunek u góry pętli bo jeśli np EAX dawno jest równe ECX to > wykona się cała pętla, kod dawno coś naknoci z macierzami a warunek > sprawdzę dopiero na końcu :) Tak, właśnie o to chodziło :) > Pewnie pisząc tę wiadomość już dość mocno nadużywam Twojej > cierpliwości i dobrych chęci, zatem z góry przepraszam :) E, nie ma za co :) Grunt aby działało i abyś się nauczył czegoś nowego. Inni czytający też - ja też musiałem chwilkę pogłówkować :) -- 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
Technical Details
Message-ID:
<ftvu0v$b35$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<ftm8vq$bl9$1@nemesis.news.neostrada.pl> <4800ac82$0$31457$f69f905@mamut2.aster.pl> <28cc2e2f-5986-4a3d-9ad4-2c847fa64b3d@q10g2000prf.googlegroups.com> <ftske8$svs$1@inews.gazeta.pl> <1db7ace5-f629-4c01-9772-f7ad42889257@q1g2000prf.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Transpozycja tablicy w C & Asembler Date: Mon, 14 Apr 2008 17:42:21 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 68 Message-ID: <ftvu0v$b35$1@inews.gazeta.pl> References: <ftm8vq$bl9$1@nemesis.news.neostrada.pl> <4800ac82$0$31457$f69f905@mamut2.aster.pl> <28cc2e2f-5986-4a3d-9ad4-2c847fa64b3d@q10g2000prf.googlegroups.com> <ftske8$svs$1@inews.gazeta.pl> <1db7ace5-f629-4c01-9772-f7ad42889257@q1g2000prf.googlegroups.com> NNTP-Posting-Host: 195.24.77.135 Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1208187746 11365 195.24.77.135 (14 Apr 2008 15:42:26 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Mon, 14 Apr 2008 15:42:26 +0000 (UTC) X-User: bog.d In-Reply-To: <1db7ace5-f629-4c01-9772-f7ad42889257@q1g2000prf.googlegroups.com> User-Agent: Thunderbird 2.0.0.12 (X11/20080213) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit