FindString() - Traduction en ASM

Pour discuter de l'assembleur
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

FindString() - Traduction en ASM

Message par Flype »

Est-ce que quelqu'un peut m'aider à traduire ce petit bout de code rigoureusement en ASM ?

J'ai fais cette fonction comme çà pour tester et je soupconne qu'en asm ce pourrait etre plus rapide que la fonction PB.

Le gain serait sans doute pas énorme, juste un petit défi ... :twisted:

Code : Tout sélectionner

Procedure.l FindString2(*StrMain.l, *StrFind.l, CharPos.l = 1, CharMask.c = '*')
 
  *hFind.CHARACTER = *StrFind
  *hMain.CHARACTER = *StrMain + CharPos - 1
 
  Repeat
    If *hFind\c = 0
      ProcedureReturn (1+((*hMain-(*hFind-*StrFind))-*StrMain))
    EndIf
    If *hMain\c = 0
      ProcedureReturn #False
    ElseIf (*hMain\c = *hFind\c) Or (*hFind\c = CharMask)
      *hFind + 1
    Else
      *hFind = *StrFind
    EndIf
    *hMain + 1
  ForEver
 
EndProcedure

;------------

myStr.s = "For testing purpose: Hello, i'm a purebasic string :-)"
myFind.s = "p___b___c"

Debug FindString(myStr,myFind,1)
Debug FindString2(@myStr,@myFind,1,'_')
Image
Thierry 31
Messages : 25
Inscription : mar. 08/févr./2005 21:44
Localisation : Toulouse

sympa

Message par Thierry 31 »

sauf que chez moi (3.94) à marche pas :( , il manquerait la déclaration d'une structure...

ce qui me brancherait bien, serait d'écrire une lib pour PB traitant les expréssions régulières.

http://nicolasj.developpez.com/articles/regex/

je recherche depuis qq temps le/les algorithmes types, mais je ne trouve rien on the ouaibe. Je vois grosso modo comment faire, mais je suppose qu'il ya des gens plus malins que moi, qui ont déjà réfléchi à la question.
Thierry 31
Messages : 25
Inscription : mar. 08/févr./2005 21:44
Localisation : Toulouse

suite

Message par Thierry 31 »

LIB en asm bien sur :)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Re: sympa

Message par Flype »

Thierry 31 a écrit :sauf que chez moi (3.94) à marche pas :( , il manquerait la déclaration d'une structure...

ce qui me brancherait bien, serait d'écrire une lib pour PB traitant les expréssions régulières.

http://nicolasj.developpez.com/articles/regex/

je recherche depuis qq temps le/les algorithmes types, mais je ne trouve rien on the ouaibe. Je vois grosso modo comment faire, mais je suppose qu'il ya des gens plus malins que moi, qui ont déjà réfléchi à la question.
normal c'est pour pb4
mais c'est tout simple à transformer en pb3.94:

Code : Tout sélectionner

Procedure.l FindString2(*StrMain.l, *StrFind.l, CharPos.l, CharMask.b)
 
  *hFind.BYTE = *StrFind
  *hMain.BYTE = *StrMain + CharPos - 1
 
  Repeat
    If *hFind\b = 0
      ProcedureReturn (1+((*hMain-(*hFind-*StrFind))-*StrMain))
    EndIf
    If *hMain\b = 0
      ProcedureReturn #False
    ElseIf (*hMain\b = *hFind\b) Or (*hFind\b = CharMask)
      *hFind + 1
    Else
      *hFind = *StrFind
    EndIf
    *hMain + 1
  ForEver
 
EndProcedure

;------------

myStr.s = "For testing purpose: Hello, i'm a purebasic string :-)"
myFind.s = "p___b___c"

Debug FindString(myStr,myFind,1)
Debug FindString2(@myStr,@myFind,1,'_')
et c'est vrai qu'un lib regex serait la bienvenue.
Image
Répondre