🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#2148
Author: =?ISO-8859-2?Q?A
Date: Fri, 16 Apr 2010 00:15
15 lines
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
#2157
Author: "Bogdan (bogdro)
Date: Fri, 16 Apr 2010 18:11
57 lines
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