🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #1791

Re: Transpozycja tablicy w C & Asembler

#1791
From: Bogdan (bogdro)
Date: Mon, 14 Apr 2008 15:42
68 lines
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-mail
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>

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