🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Transpozycja tablicy w C & Asembler

#1788
From: doles2
Date: Sat, 12 Apr 2008 17:09
53 lines
3613 bytes
Bernard wrote:
>Zacznij od poprawienia błędu w epilogu - kolejność 2. i 3. instrukcji od
>końca. Ponadto prawdopodobnie kręcisz coś ze wskaźnikami - nietrudno o
>to przy tak zagmatwanym zapisie ich wyliczania i modyfikacji. Wyrzuć
>pushad i popad i wstaw to, co trzeba zgodnie z konwencją wołania.
Dzięki za pomoc. Faktycznie miałem skopane te rozkazy usuwające ramkę
stosu. Jednak to tylko wyeliminowało segmentation fault. Co gorsza
myślałem, że to koniec moich problemów ale oczywiście nie. Problem
polega na tym, że kombinowałem jak koń pod górkę aby napisać w
Asemblerze funkcję która robiłaby to samo co taki zapis w C:
for(i=0; i<A; i++)
    for(j=0; j<B; j++)
        transponowana[j][i] = macierz[i][j];

Czyli po prostu takie przepisanie wartości aby indeksy były
pozamieniane miejscami. Jak napisałem wcześniej chciałem użyć tego
schematu adresowania tablic dwuwymiarowych. Miałem pomysł aby
przypisać ESI np licznik "i", zaś dla EDI zmienną "j", jednak pomysł
spalił na panewce bo wg moich (zapewne błędnych) wyliczeń zabrakło po
prostu rejestrów ogólnego przeznaczenia. Potrzebuję dwóch rejestrów do
zachowania początków tablic, dwóch rejestrów na licznik pętli i kolumn
oraz jednego na bufor. Czyli aż chciało by się zapisać coś takiego:
	mov esi, [ebp+ 8]    ;adres macierzy źródłowej
	mov edi, [ebp+12]    ;adres macierzy docelowej
	mov eax, [ebp+16]    ;załaduj ECX na wartość liczby A
	mov ebx, [ebp+20]    ;załaduj EDX na wartość liczby B

	imull eax,ebx
	mov   ecx,eax
	petla:
		mov edx, [esi + (eax*ebx + edi)*4]
		mov [edi + (edi + (ebx*eax + esi)*4]
		inc esi
		inc edi
		loop petla
	;tutaj coś dalej sam nie wiem co
No ale takiego nienormalnego adresowania nie ma jak zapisałem a nawet
gdyby było, to w ten sposób dostałbym się tylko do elementów [0][0],
[1][1], [2][2] ... a co np z [0][1] ? Nie mam pojęcia. Użyłem takiego
głupiego kodu bo tylko tak pisząc to na kartce i robiąc próby
wychodziło mi teoretycznie dobranie się do wszystkich elementów obu
tablic. Jednak po uruchmieniu mam taki wynik:
0 1 2
3 4 5


------------------------------

196608 262144
327680 0
-1076123404 -1210122082
Wiem tylko tyle, że im bardziej się w to zagłębiam tym staję się
głupszy :(
Technical Details
Message-ID: <28cc2e2f-5986-4a3d-9ad4-2c847fa64b3d@q10g2000prf.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!goblin1!goblin.stu.neva.ru!newspeer1.nac.net!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!q10g2000prf.googlegroups.com!not-for-mail
References: <ftm8vq$bl9$1@nemesis.news.neostrada.pl> <4800ac82$0$31457$f69f905@mamut2.aster.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!feed.news.interia.pl!news.nask.pl!news.nask.org.pl!goblin1!goblin.stu.neva.ru!newspeer1.nac.net!border2.nntp.dca.giganews.com!nntp.giganews.com!postnews.google.com!q10g2000prf.googlegroups.com!not-for-mail
From: doles2@gmail.com
Newsgroups: pl.comp.lang.asm
Subject: Re: Transpozycja tablicy w C & Asembler
Date: Sat, 12 Apr 2008 10:09:45 -0700 (PDT)
Organization: http://groups.google.com
Lines: 65
Message-ID: <28cc2e2f-5986-4a3d-9ad4-2c847fa64b3d@q10g2000prf.googlegroups.com>
References: <ftm8vq$bl9$1@nemesis.news.neostrada.pl> <4800ac82$0$31457$f69f905@mamut2.aster.pl>
NNTP-Posting-Host: 83.8.249.10
Mime-Version: 1.0
X-Trace: posting.google.com 1208020185 491 127.0.0.1 (12 Apr 2008 17:09:45 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Sat, 12 Apr 2008 17:09:45 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: q10g2000prf.googlegroups.com; posting-host=83.8.249.10;  posting-account=AhF93woAAADzKqj7ByrwtnLI5wHJPaQ_
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.8.1.13)  Gecko/20080325 Ubuntu/7.10 (gutsy) Firefox/2.0.0.13,gzip(gfe),gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit