🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: nic nowego - zagadka

#2206
From: Bogdan (bogdro)
Date: Fri, 16 Apr 2010 16:11
56 lines
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-mail
References: <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