PureBasic

Forums PureBasic
Nous sommes le Jeu 23/Mai/2013 1:49

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 
Auteur Message
 Sujet du message: conversion d'un nombre pour montrer sur l'ecran(to string)
MessagePosté: Sam 02/Juin/2007 0:57 
Hors ligne

Inscription: Ven 01/Juin/2007 19:06
Messages: 6
Bonjour a tous,

Une autre conversion

nombre a chaine (Number to string)

Excusez mon francais je n'ai pas d'experience en francais dans les ordinateurs.(30 ans d'anglais)

Code:

;was not tested for speed(n'a pas ete' teste' pour la vitesse)
;only an exercise, seulement un exercice
Procedure StrL(l.l,*p)
!MOV eax,dword[p.v_l]
  ! PUSH edi;+4 for the push
  !  MOV edi,dword[p.p_p+4];the pointer value adapte' pour le push 
    ! MOV dl ,255     ;make end marker,marque de fin
     ! PUSH edx      ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      !MOV ecx ,10   ;
! x0:
      !MOV edx ,0
       !DIV ecx       ; divide eax by 10
        !PUSH edx    ; save the rest <<<<<<<<<<<<<<<<<<<<<<<
         !CMP eax ,0; result of division
          !JA x0     ; is eax 0 ? finished ?
!x2:
          !POP eax   ; start getting back the results of divisions>>>>>>>>>>>>recuperer les resultats
          !CMP al ,255   ; untill start/end marker found
          !JE x9
          !ADD al ,'0'
          !STOSB
          !JMP x2
! x9:
          !MOV al,0
          !STOSB    ; finished ZERO TERMINATING,mettre un zero
   ! POP edi  ;   restore edi>>>>>>>>>>>>>>>>>>>>>>>>> 
EndProcedure

;ALLOCATION OF SPACE
st.s="00000000000000"
Debug st
b.l=19191919;number to convert
     
Strl(b,@st);or stp

Debug st
End


gebe :)


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 02/Juin/2007 17:38 
Hors ligne

Inscription: Ven 01/Juin/2007 19:06
Messages: 6
Le contrepoint .(En Français)

En n'employant pas les accents circonflexes.



Code:
;cette fois çi,j'emplois le "IN LINE ASM"
;n'oubliez pas de le selecter (config)
;De cette façon on peux  suivre
;parfaitement avec le "debugger"(ce qui n'est pas possible
;quand on est avec l'autre façon(! avec les points
;d'exclamation)

Procedure StrL(l.l,p.l)
;p.l est un "dummy" pour que l'assembleur
;passe le pointeur a la procédure
;p per sè n'est pas employé ici.
Debug "@st   "+Hex(p)
Debug "l.l   "+Hex(l)
;il y a peut être un autre moyen ?
;la seule difference est a l'entrée


  MOV eax,l
;in LIST.ASM p.v_p is declared as an EQUATE   
; esp+pso+4 (return pushed +4 ? what is pso ?)Je ne sais pas
   ;PUSH edi;décommentez pour sauver edi,commentez au suivant
   MOV edi,[esp+8];dword[p.v_p+4];the pointer value   
  ;mov edi,[esp+12];décommentez si edi est sauvé.
       MOV dl ,255     ;faisons une marque de fin
      PUSH edx      ;sauvons la.<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      MOV ecx ,10   ;le diviseur
! x0:
      MOV edx ,0
       DIV ecx       ; divisons eax par 10
        PUSH edx    ; savons le reste <<<<<<<<<<<<<<<<<<<<<<<
         CMP eax ,0; resultat de la division
          JA x0     ;  eax = 0 ? fini ?
!x2:
          POP eax   ;commençons a reprendre les resultats des divisions>>>>>>>>>>>>
          CMP al ,255   ; j'usqu'à ce que la marque de fin est trouvée
                    JE x9
          ADD al ,'0'
          STOSB
          JMP x2
! x9:;! sont necessaires pour les relais
          MOV al,0;
          STOSB    ; c'est fini mettons un zéro pour terminer la chaine
   ;décommentez si edi est sauvé
   ; POP edi  ;   restore edi>>>>>>>>>>>>>>>>>>>>>>>>> 
EndProcedure

;ALLOCATION de Place
st.s="00000000000000"
Debug "Avant la convertion   :  " +st
b.l=19191919;ici le nombre à convertir******************
Debug @st   
Strl(b,@st);

Debug "La convertion finie   :  "+ st
End

gebe :)


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 18/Juin/2007 19:15 
Hors ligne

Inscription: Ven 01/Juin/2007 19:06
Messages: 6
une autre façon:

Code:

;j'emplois le "IN LINE ASM"
;n'oubliez pas de le selecter (config)
;De cette façon on peux  suivre
;parfaitement avec le "debugger"(ce qui n'est pas possible
;quand on est avec l'autre façon(! avec les points
;d'exclamation)
; une drole de division !!
;je l'ai juste fini
;completement differente......
;3 a 4 foix plus rapide  ...Je crois
;laissez moi savoir
Procedure StrL_by_mul_no_rev(l.l,p.l)
;p.l est encore un "dummy" pour que l'assembleur
;passe le pointeur a la procédure
;p per sè n'est pas employé ici.
Debug "@st   "+Hex(p)
Debug "l.l   "+Hex(l)


MOV esi ,10
MOV ebx ,0x1999999a
MOV edi ,[esp +8];8 +15;p.v_p + 15
ADD edi ,15
STD
MOV eax,l
!boucle:
    MUL ebx
    PUSH edx
    MUL esi
    XCHG al, dl
    ADD al,'0'
    STOSB
    POP eax
    CMP eax ,0
JNE boucle
CLD
ADD edi,1
MOV eax,edi

EndProcedure   


;ALLOCATION de Place
st.s="................"+Chr(0)
Debug "Avant la convertion   :  " +st
b.l=123456789;ici le nombre à convertir******************
Debug @st   
Strl_by_mul_no_rev(b,@st);

Debug "La convertion finie   :  "+ st
End

;gebe :)


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 18/Juin/2007 20:18 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 07/Avr/2005 1:06
Messages: 1392
Localisation: Vietnam-HCMC
Sympa tes petits bouts de programmes
N'hésite pas à en remettre :D


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 4 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye