Thread View: pl.comp.lang.asm
2 messages
2 total messages
Started by =?ISO-8859-2?Q?A
Fri, 16 Apr 2010 00:15
nic nowego - zagadka
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 00:15
Date: Fri, 16 Apr 2010 00:15
15 lines
391 bytes
391 bytes
Dane s� dwa pola przylegaj�ce do siebie. nale�y je zamieni� miejscami, czyli maj�c AAA.....AAAABBBBBB...BBBBB zrobi� BBBBBB....BBBBBBAAA....AAAA Zawarto�ci i d�ugo�ci p�l dowolne, jedyny warunek - pierwszy bajt pola B nastepuje bezpo�rednio po ostatnim bajcie pola A. Zapis AAAAA lub BBBBB nie powinien sugerowa�, �e wszystkie bajty w polu s� jednakowe.
Re: nic nowego - zagadka
Author: "Bogdan (bogdro)
Date: Fri, 16 Apr 2010 18:11
Date: Fri, 16 Apr 2010 18:11
57 lines
1937 bytes
1937 bytes
W dniu 16.04.2010 00:15, Andrzej Gra�y�ski pisze: > Dane s� dwa pola przylegaj�ce do siebie. nale�y je zamieni� miejscami, > czyli maj�c > > AAA.....AAAABBBBBB...BBBBB > > zrobi� > > BBBBBB....BBBBBBAAA....AAAA > > Zawarto�ci i d�ugo�ci p�l dowolne, jedyny warunek - pierwszy bajt pola B > nastepuje bezpo�rednio po ostatnim bajcie pola A. > > Zapis AAAAA lub BBBBB nie powinien sugerowa�, �e wszystkie bajty w polu > s� jednakowe. Jak zwykle, na rozgrzewk�, podam najwolniejsze rozwi�zanie: 1. Odwracasz kolejno�� bajt�w w ca�ym ci�gu, dostaj�c BBBB...BBBBAAA...AAAA ale z bajtami w polach w odwrotnej kolejno�ci, ni� potrzeba. 2. Odwracasz kolejno�� bajt�w w polu "A" 3. Odwracasz kolejno�� bajt�w w polu "B" Skoro nie zak�adamy, �e bajty w polach s� jednakowe, to za�o�y�em sobie, �e ich d�ugo�� znamy (tzn. nie musimy tego dodatkowo szuka�, co do�o�y�oby jeden krok do algorytmu). Sam kod (co prawda nie m�j) jest jedn�-dwie zagadki wcze�niej - po prostu procedur� odwracania kolejno�ci bajt�w stosujemy 3 razy pod rz�d (dlatego to na pewno nie b�dzie najszybsze rozwi�zanie). Mo�na te� "przepycha�" bajty po jednym na raz, co� w stylu: mov esi, adres_pola mov edi, dlugosc_B petla: mov al, [esi + dlugosc_A + dlugosc_B - 1] ; AL = ostatni bajt mov ecx, dlugosc_A + dlugosc_B - 1 mov edx, -1 petla2: mov bl, [esi + dlugosc_A + dlugosc_B - 1 + edx] mov [esi + dlugosc_A + dlugosc_B + edx], bl dec edx loop petla2 mov [esi], al ; ostatni teraz pierwszym dec edi jnz petla ; wypychamy wszystkie "B" -- 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
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