Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Assembler » SUCH BEFEHL

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.10.2004, 15:31 Uhr
~LEO
Gast


Halli Hallo
Ich habe so einen kleinen suchalg. in ass geschrieben die habe ich inline im c++ code ( ist einfach schneller als c )
Nun meine Frage ..
ich gehe die Buchtaben sequenziell durch bis zu meinem Treffer gibt es denn nicht einen Befehl der sofort zum treffer in der Sequenz springt ???
auf dem oS390 ist das der TRT ( oder mann kann diesen zumindest dafür benutzen )
danke im voraus bis denne ...
Leo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.10.2004, 15:49 Uhr
(un)wissender
Niveauwart


Mal so ungestest, sollte aber so oder so ähnlich funzen.

Code:
cld ;von links nach rechts
les edi, [Dest]; pointer auf die quelle, vielleicht reicht auch mov
mov al, [Treffer]; hier steht das zu suchende byte
mov ecx, [length] ;solange wollen wir höchstens suchen
repne scasb ;suchen
je gefunden ; edit - [dest] = offset,
;ab hier nicht gefunden


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 15.10.2004 um 15:49 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.10.2004, 17:33 Uhr
~Leo
Gast


(un)wissender "for president"
ich habs noch nicht getested aber sieht gut aus
besten dank ..... :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.10.2004, 18:55 Uhr
(un)wissender
Niveauwart


Das funzt.

Gibt den Index zurück, wo letter gefunden wurde oder -1 wenn nichts gefunden wurde.
In C/C++ muss der Prototype so deklariert werden

C++:
#ifdef _cplusplus
extern "C"
#endif
unsigned _stdcall searchDigit(const char *, char, unsigned);




Code:
;stdcall
searchDigit PROC source:DWORD, letter:BYTE, len:DWORD
    push ebp
    mov ebp, esp
    push edi
    cld
    mov edi, [source]
    mov al,  [letter]
    mov ecx, [len]
    repne scasb
    jz found

not_found:
    mov eax, -1
    jmp return
    
found:
    sub edi, [source]
    lea eax, [edi - 1]

return:
    pop edi    
    mov esp, ebp
    pop ebp    
    ret 12
searchDigit ENDP



Bsp.:
Input Hallo, a, 5
Output 1

Input Hallo, H, 5
Output 0

Input Hallo, J, 5
Output -1
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 15.10.2004 um 19:46 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.10.2004, 20:18 Uhr
(un)wissender
Niveauwart


Ein wenig optimiert:


Code:
searchDigit PROC source:DWORD, letter:BYTE, len:DWORD
    push edi
    cld
    mov edi, [esp + 8] ;source
    mov al,  [esp + 12] ;letter
    mov ecx, [esp + 16] ;len
    
    repne scasb
    jz found

not_found:
    mov eax, -1
    jmp return
    
found:
    sub edi, [esp + 8]
    lea eax, [edi - 1]

return:
    pop edi    
    ret 12
searchDigit ENDP


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Assembler ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: