Article View: pl.comp.lang.asm
Article #2188Re: Równie prosta zagadka
From: Andrzej Grażyński
Date: Fri, 09 Apr 2010 23:09
Date: Fri, 09 Apr 2010 23:09
75 lines
2691 bytes
2691 bytes
Wojciech Muła pisze: > Bernard <bernard@earth.net> wrote: > >> On 2010-04-07 22:38, Andrzej Grażyński wrote: >>> Dane jest pole o długości L bajtów. Odrócić kolejność bajtów w tym polu. >>> >>> Wskazówka: czy SWAPB może się tu do czegoś przydać? >> SWAPB może się przydać, ale więcej z tym kłopotu niż pożytku z powodu >> konieczności obsługi przypadków, gdy rozmiar wektora jest poniżej 4 lub >> nie jest wielokrotnością 4. > > Przede wszystkim BSWAP. :) > > I wcale nie tak skomplikowanie, bo trzeba brać pod uwagę końcówkę, > ale niepodzielną przez 8: > > mov esi, adres > mov ecx, długość > lea edi, [esi + ecx - 4] > test ecx, 0xfffffff8 > jnz zamiana_bajt_po_bajcie > and ecx, 0xfffffff8 > .pętla: > mov eax, [esi] > mov ebx, [edi] > bswap eax > bswap ebx > mov [edi], eax > mov [esi], ebx > add esi, 4 > sub edi, 4 > sub ecx, 8 > jnz .pętla > > mov ecx, długość > and ecx, 0x7 > jnz .koniec > > sub esi, 3 ; tutaj tylko korekta > add edi, 3 ; wskaźników > > .zamiana_bajt_po_bajcie: > tu Twój kod > .koniec: > > W podobny sposób można wykorzystać mój ulubiony rozkaz PSHUFB - przy > jego użyciu w jednej iteracji wymieniałoby się 16 bajtów. :) Jutro > się tym trochę pobawię, to wrzucę na grupę jakieś benchmarki. > > w. > LEA EDI,[ESI+ECX-1] MOV EDX,7 AND EDX,ECX SETNZ DL SHR ECX,3 ADD ECX,EDX JZ @@Ready CLD @Loop: LODSD MOV EDX,[EDI] BSWAP EAX BSWAP EDX STOSD MOV [ESI-4],EDX SUB EDI,8 LOOP @@Loop @@Ready:
Technical Details
Message-ID:
<hpoc45$loe$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!border1.nntp.ams3.giganews.com!border1.nntp.ams2.giganews.com!border1.nntp.ams.giganews.com!nntp.giganews.com!news.unit0.net!news.nask.pl!news.nask.org.pl!news.onet.pl!not-for-mailReferences:
<hpiqg4$te8$2@news.onet.pl> <hpmpsm$ga1$1@newsread1.aster.pl> <20100409143730.c91d4f14.wojciech_mula@poczta.null.onet.pl.invalid>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!border1.nntp.ams3.giganews.com!border1.nntp.ams2.giganews.com!border1.nntp.ams.giganews.com!nntp.giganews.com!news.unit0.net!news.nask.pl!news.nask.org.pl!news.onet.pl!not-for-mail From: Andrzej Grażyński <grazynsk@petex.com.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Równie prosta zagadka Date: Sat, 10 Apr 2010 01:09:43 +0200 Organization: http://onet.pl Lines: 82 Message-ID: <hpoc45$loe$1@news.onet.pl> References: <hpiqg4$te8$2@news.onet.pl> <hpmpsm$ga1$1@newsread1.aster.pl> <20100409143730.c91d4f14.wojciech_mula@poczta.null.onet.pl.invalid> NNTP-Posting-Host: public-gprs135767.centertel.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1270854600 22286 79.162.125.152 (9 Apr 2010 23:10:00 GMT) X-Complaints-To: niusy@onet.pl NNTP-Posting-Date: Fri, 9 Apr 2010 23:10:00 +0000 (UTC) User-Agent: Thunderbird 2.0.0.24 (Windows/20100228) In-Reply-To: <20100409143730.c91d4f14.wojciech_mula@poczta.null.onet.pl.invalid> Bytes: 2707 X-Original-Bytes: 2652 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit