Article View: pl.comp.lang.asm
Article #872Re: string reverse
From: Bartek Dajewski
Date: Tue, 05 Dec 2006 13:29
Date: Tue, 05 Dec 2006 13:29
89 lines
3067 bytes
3067 bytes
Czesc
Uzytkownik "mikezum" <noname@poczta.onet.pl> napisal w wiadomosci
news:8j3qqhx2oh2t.16ahj7wfz15t2$.dlg@40tude.net...
> chcialbym przekonwertowac liczbe z postaci intelowskiej
> do zwyklego stringa, czyli normalnie jest tak
> a:int64
> a:=1
> rzutuje na stringa - czyli jest tak
> "$01$00$00$00$00$00$00$00"
> a chcialbym zeby bylo tak
> "$00$00$00$00$00$00$00$01"
> jak to zrobic bardzo szybko ( bez kopiowania bajt po bajcie), bo
kopiowanie
Jesli chcesz, zeby pierwszy bajt stal sie ostatnim, a ostatni pierwszym to
bez kopiowania po bajcie sie nie obejdzie.
> pamieci ztcw odbywa sie dla pierwszego i drugiego operandu w te sama
strone
Tak, to prawda, jesli mówimy o operacji typu movs...
[...]
> procedure ValueToValueIntel(var BufferIn;var BufferOut;const
> BufferLen:integer);
Chyba lepiej (klarowniej) byloby tak:
procedure ValueToValueIntel(const BufferIn;var BufferOut;const
BufferLen:integer);
> LEA EBX,pBufferIn
> MOV EBX,[EBX]
Tu bym dal po prostu:
mov ebx, [pBufferIn]
albo jeszcze prosciej - odwolal bezposrednio do parametrów zamiast do
zmiennej tymczasowej:
mov ebx, [BufferIn]
> LEA EDX,pBufferOut
> MOV EDX,[EDX]
a tu:
mov edx, [BufferOut] (tez bez zmiennej tymcz.)
add edx, ecx (koniec bufora)
i dodalbym (*1):
shr ecx, 2
> MOV EAX,[EBX]
> MOV [EDX-3],EAX
> inc EBX
> inc EBX
> inc EBX
> inc EBX
> DEC EDX
> DEC EDX
> DEC EDX
> DEC EDX
a to bym zastapil przez:
dec edx
mov al, [ebx]
inc ebx
mov [edx], al
lub (zwróc uwage na zmiane kolejnosci bajtów przed zapisem):
mov eax, [ebx]
lea ebx, [ebx + 4]
xchg al, ah
lea edx, [edx - 4]
rol eax, 16
xchg al, ah
mov [edx], eax
[...]
> DEC ECX
> DEC ECX
> DEC ECX
> DEC ECX
a tu zostawil tylko jeden dec ecx (patrz *1)
DEC ECX
JNZ @@Loop
--
Pozdrawiam :-)
Bartek
PS. Kod pisany "z glowy", wiec nie dam glowy, ze bezbledny...
Technical Details
Message-ID:
<el406i$1c8$1@mx1.internetia.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.internetia.pl!not-for-mailReferences:
<8j3qqhx2oh2t.16ahj7wfz15t2$.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!newsfeed.pionier.net.pl!news.internetia.pl!not-for-mail From: "Bartek Dajewski" <bartek@UsunTo.tradiss.com.pl> Newsgroups: pl.comp.lang.asm Subject: Re: string reverse Date: Tue, 5 Dec 2006 14:29:08 +0100 Organization: Netia Telekom S.A. Lines: 90 Message-ID: <el406i$1c8$1@mx1.internetia.pl> References: <8j3qqhx2oh2t.16ahj7wfz15t2$.dlg@40tude.net> NNTP-Posting-Host: 213.186.83.151 Mime-Version: 1.0 X-Trace: mx1.internetia.pl 1165329427 1416 213.186.83.151 (5 Dec 2006 14:37:07 GMT) X-Complaints-To: abuse@inetia.pl NNTP-Posting-Date: Tue, 5 Dec 2006 14:37:07 +0000 (UTC) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1409 X-Tech-Contact: usenet@internetia.pl X-Newsreader: Microsoft Outlook Express 6.00.2800.1409 X-Priority: 3 X-Server-Info: http://www.internetia.pl/news/ X-MSMail-Priority: Normal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit