🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
5 messages
5 total messages Started by Andrzej Grażyński Fri, 09 Apr 2010 21:00
Podobna zagadka
#2200
Author: Andrzej Grażyński
Date: Fri, 09 Apr 2010 21:00
2 lines
801 bytes
Dane jest pole o adresie początku w ESI i długości w bajtach w ECX. 
Należy odwrócić kolejność BITÓW.
Re: Podobna zagadka
#2201
Author: Bernard
Date: Sun, 11 Apr 2010 20:21
22 lines
1474 bytes
On 2010-04-09 23:00, Andrzej Grażyński wrote:
> Dane jest pole o adresie początku w ESI i długości w bajtach w ECX.
> Należy odwrócić kolejność BITÓW.

xlop:
     lodsb
	mov	ah, al
	and	ax, 0x55aa
	shr	al, 1
	aad	2
	mov	ah, al
	and	ax, 0x33cc
	shr	al, 2
	aad	4
	ror	al, 4
     xchg    al, [esi + ecx - 2]
	; i tu to samo, co powyżej - 9 instrukcji
     mov    [esi - 1], al
     sub    ecx, 2
     ja    xlop

razem 23 instrukcje na 1 obieg pętli
Re: Podobna zagadka
#2202
Author: Andrzej Grażyński
Date: Sun, 11 Apr 2010 21:37
25 lines
1492 bytes
Bernard pisze:
> On 2010-04-09 23:00, Andrzej Grażyński wrote:
>> Dane jest pole o adresie początku w ESI i długości w bajtach w ECX.
>> Należy odwrócić kolejność BITÓW.
> 
> xlop:
>     lodsb
>     mov    ah, al
>     and    ax, 0x55aa
>     shr    al, 1
>     aad    2
>     mov    ah, al
>     and    ax, 0x33cc
>     shr    al, 2
>     aad    4
>     ror    al, 4
>     xchg    al, [esi + ecx - 2]
>     ; i tu to samo, co powyżej - 9 instrukcji
>     mov    [esi - 1], al
>     sub    ecx, 2
>     ja    xlop
> 
> razem 23 instrukcje na 1 obieg pętli

A nie lepiej użyć BT, BTS i BTR?
Re: Podobna zagadka
#2203
Author: Andrzej Grażyński
Date: Mon, 12 Apr 2010 14:14
22 lines
1177 bytes
Andrzej Grażyński pisze:
> Dane jest pole o adresie początku w ESI i długości w bajtach w ECX. 
> Należy odwrócić kolejność BITÓW.

SHL ECX,3
JZ  @@Done
MOV EBX,ECX
XOR EDX,EDX

@@Loop:
   DEC EBX
   BT [ESI],EBX
   SETC AL
   BT [ESI], EDX
   SBB AL,0
   JZ  @@Ancora
   BTC [ESI],EBX
   BTC [ESI],EDX
@@Ancora:
   INC  EDX
   LOOP @Loop
@@Done:
Re: Podobna zagadka
#2204
Author: Bernard
Date: Mon, 12 Apr 2010 18:36
37 lines
2085 bytes
On 2010-04-12 16:14, Andrzej Grażyński wrote:
> Andrzej Grażyński pisze:
>> Dane jest pole o adresie początku w ESI i długości w bajtach w ECX.
>> Należy odwrócić kolejność BITÓW.
>
> SHL ECX,3
> JZ @@Done
> MOV EBX,ECX
> XOR EDX,EDX
>
> @@Loop:
> DEC EBX
> BT [ESI],EBX
> SETC AL
> BT [ESI], EDX
> SBB AL,0
> JZ @@Ancora
> BTC [ESI],EBX
> BTC [ESI],EDX
> @@Ancora:
> INC EDX
> LOOP @Loop
> @@Done:


Przyjmując optymistycznie, że kod jest wolny od błędów, otrzymujemy 4 
obiegi pętli na bajt wektora, każdy obieg średnio po 9 instrukcji z 
nieprzewidywalnym skokiem (JZ), czyli 36 instrukcji na bajt z ośmioma 
nieprzewidywalnymi skokami o koszcie kilkudziesięciu instrukcji każdy. 
Każdy bajt będzie przy tym odczytywany średnio 12 razy i zapisywany 4 - 
sporo.

Moje rozwiązanie ma 11.5 instrukcji na bajt bez skoku zależnego od 
danych, po jednym odczycie i zapisie na bajt. Wolne pojedyncze 
instrukcje AAD można zastąpić szybkimi parami shl + or.

c.b.d.o. :)
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