Article View: pl.comp.lang.asm
Article #2206Re: nic nowego - zagadka
From: Bogdan (bogdro)
Date: Fri, 16 Apr 2010 16:11
Date: Fri, 16 Apr 2010 16:11
56 lines
2765 bytes
2765 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
Technical Details
Message-ID:
<hqa27h$jg6$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<hq837d$45m$1@news.onet.pl>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: nic nowego - zagadka Date: Fri, 16 Apr 2010 18:11:28 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 56 Message-ID: <hqa27h$jg6$1@inews.gazeta.pl> References: <hq837d$45m$1@news.onet.pl> NNTP-Posting-Host: rudy.mif.pg.gda.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1271434290 19974 153.19.42.16 (16 Apr 2010 16:11:30 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Fri, 16 Apr 2010 16:11:30 +0000 (UTC) X-User: bog.d In-Reply-To: <hq837d$45m$1@news.onet.pl> User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit