begin process at 2008 09 06 09:36:37
1 237 670 membres
67 nouveaux aujourd'hui
14 313 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

PETIT ÉQUIVALENT DU ?: DU C EN DELPHI POUR LES CHAINES, LONGINT & BOOLEAN


Information sur la source

Catégorie :Delphi et asm Niveau : Débutant Date de création : 03/09/2003 Date de mise à jour : 03/09/2003 02:48:34 Vu : 3 736

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

Ces fonctions renvoit une valeur ou l'autre (chaine, longint ou boolean) en fonction de la valeur TRUE/FALSE passée en paramètre.
En C, on ferait Reponse=(Value=1)?1:2;
ou avec des chaines Reponse=(Key="Y")?"YES":"NO";

En Delphi, ça donnera Reponse:=ChoixS(Key='S','YES','NO');

J'aurais pu utiliser des variants et ne faire qu'une seule fonction mais ce n'était pas le but ici. Si quelqu'un veut se lancer dans l'écriture...

Source

  • function ChoixS(PremierChoix:Boolean; Choix1,Choix2:ShortString):ShortString; Assembler;
  • Asm
  • // If PremierChoix then Result:=Choix1 else Result:=Choix2;
  • //=- original version was 34 asm lines and 2 external procs by Delphi compiler ;) now it's 14 lines -=
  • push esi
  • push edi
  • test al,al
  • jz @@NotTrue
  • mov esi,Choix1
  • jmp @@End
  • @@NotTrue:
  • mov esi,Choix2
  • @@End:
  • mov edi,@Result
  • xor ecx,ecx
  • mov cl,[esi]
  • inc cl
  • rep movsb
  • pop edi
  • pop esi
  • End;
  • function ChoixL(PremierChoix:Boolean; Choix1,Choix2:LongInt):LongInt; Assembler;
  • Asm
  • // If PremierChoix then Result:=Choix1 else Result:=Choix2;
  • test al,al
  • jz @@NotTrue
  • mov eax,edx // it's true so put the first parameter into the result
  • ret
  • @@NotTrue:
  • mov eax,ecx // it's false, put second parameter into result
  • End;
  • function ChoixB(PremierChoix:Boolean; Choix1,Choix2:Boolean):Boolean; Assembler;
  • Asm
  • // If PremierChoix then Result:=Choix1 else Result:=Choix2;
  • test al,al
  • jz @@NotTrue
  • mov eax,edx // it's true so put the first parameter into the result
  • ret
  • @@NotTrue:
  • mov eax,ecx // it's false, put second parameter into result
  • End;
function  ChoixS(PremierChoix:Boolean; Choix1,Choix2:ShortString):ShortString; Assembler;
Asm
    //  If PremierChoix then Result:=Choix1 else Result:=Choix2;
    //=- original version was 34 asm lines and 2 external procs by Delphi compiler ;) now it's 14 lines -=
    push   esi
    push   edi
    test   al,al
    jz     @@NotTrue
    mov    esi,Choix1
    jmp    @@End
  @@NotTrue:
    mov    esi,Choix2
  @@End:
    mov    edi,@Result
    xor    ecx,ecx
    mov    cl,[esi]
    inc    cl
    rep    movsb
    pop    edi
    pop    esi
End;

function  ChoixL(PremierChoix:Boolean; Choix1,Choix2:LongInt):LongInt; Assembler;
Asm
    //  If PremierChoix then Result:=Choix1 else Result:=Choix2;
    test   al,al
    jz     @@NotTrue
    mov    eax,edx       // it's true so put the first parameter into the result
    ret
  @@NotTrue:
    mov    eax,ecx       // it's false, put second parameter into result
End;

function  ChoixB(PremierChoix:Boolean; Choix1,Choix2:Boolean):Boolean; Assembler;
Asm
  //  If PremierChoix then Result:=Choix1 else Result:=Choix2;
    test   al,al
    jz     @@NotTrue
    mov    eax,edx       // it's true so put the first parameter into the result
    ret
  @@NotTrue:
    mov    eax,ecx       // it's false, put second parameter into result
End;
    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Boutique

Boutique de goodies CodeS-SourceS