🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: string reverse

#872
From: Bartek Dajewski
Date: Tue, 05 Dec 2006 13:29
89 lines
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-mail
References: <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