purebasic->ass->purebasic ?

Pour discuter de l'assembleur
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

purebasic->ass->purebasic ?

Message par Backup »

peut t'on actuelement generer un listing assembleur (une routine) , a partir d'un listing Purebasic , pour pouvoir reintegrer ce listing assembleur dans le listing
purebasic ?? 8O
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tu pourrais expliquer un peu plus ce que tu veux faire :roll:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

le purebasic permet d'integrer de l'assembleur dans des lignes !

je voulais savoir s'il est possible de sauver un listing purebasic en
assembleur (/COMMENTED)

pour pouvoir integre ce listing ASS dans le listing purebasic

par exemple tu fait une petite routine purebasic
tu la genere en assembleur!
peut t'on réimporter cette routin assembleur dans un source purebasic

(heu ! la je sais plus comment expliquer mieux :D )

:D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Dobro a écrit :le purebasic permet d'integrer de l'assembleur dans des lignes !

je voulais savoir s'il est possible de sauver un listing purebasic en
assembleur (/COMMENTED)

pour pouvoir integre ce listing ASS dans le listing purebasic

par exemple tu fait une petite routine purebasic
tu la genere en assembleur!
peut t'on réimporter cette routin assembleur dans un source purebasic

(heu ! la je sais plus comment expliquer mieux :D )

:D
Normalement Oui mais ça nécessite des modifs et ce n'est pas asussi simple (je ne vois pas l'intéret puisque le code PB sera tranformé en asm)

PB nomme en asm les procedures avec des étiquettes (label) comme ceci

Code : Tout sélectionner

	JMP	 _EndProcedure0
_Procedure0:
et termine la proceudre avec l'étiquette

Code : Tout sélectionner

_EndProcedure0:
au fur et à mesure, le compteur de procédure s'incémente et les procedure s'appeleront

Code : Tout sélectionner

_Procedure1
_Procedure2
_Procedure3
_ProcedureX
etc.


le JMP _EndProcedure0 permet lorsque le code s'exécute, de ne pas lancer la procedure, car elle ne s'exécutera qu'avec un call

Donc si tu réintègres une procedure asm dans le code PB, il faut vérifier que son étiquette n'existe pas et si oui, il faut changer le numéro des étiquettes de début et de fin. Dès lors que c'est de l'asm, il fau utiliser un CALL _ProcedureX pour lancer cette procedure. Il faut veiller si tu modifies le code asm de la procedure avant de l'intégrer au code PB, de :

Ne pas modifier l'ordre des variables locales en modifiant la valeur ajouté à esp pour y accéder
N'utiliser que les registres eax et edx (sinon il faut sauvegarder les autres avant de les utiliser)
Bien faire attention aux modifs du registre esp
Si des variables globales sont utilisées par cette routine asm, il faut qu'elles existent dans le code PB, les déclarer avant la routine asm

A mon avis si tu ne modifies pas le code asm, tu as intérêt à utiliser Taibite pour te faire une lib, c'est plus simple et plus sur, le code asm sera le même puique c'est le compilateur PB qui le génère, Tailbite organise ce code pour en faire différents fichiers
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

Moi qui fait de l'ASM, j'ai comparé avec l'ASM généré par la compilation d'un programme 100% PB. Et bien, il n'y a pas photo : le code ASM dégéré n'est pas optimisé (ce qui est normal d'ailleur).
Donc, le mieux est d'insérer ton propre code asm optimisé dans un programme PB. Moi perso, je gagne parfois 80% de vitesse (?!!)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Merci pour vos reponses ! :D

(c'etait pour faire avancer le chmilblik :D )
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Message par Fig »

Oui, ca m'interresse aussi parceque plutot que de reinventer la roue,
en asm, je prefere récuperer la routine purebasic et l'optimiser moi-même... Si qqu'un a une solution pour récuperer le code asm généré par le compilateur...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

il te faut utiliser "(/COMMENTED) " voir doc section "Utiliser le compilateur SHELL":D

/COMMENTED : créé un fichier de sortie '.asm' commenté en même temps que l'exécutable. Ce fichier peut être ré-assemblé ultérieurement après l'avoir modifié selon vos besoins. Cette option est à destination des programmeurs avancés.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Perso je préfére (de loin) le fameux PureASM de notre ami Erix14!
http://home.tele2.fr/erix14/PureASM.htm
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

...d'où on attend une MAJ et des news...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je viens de tomber sur ce genial POST de SROD qui correspond un peu à la demande de DOBRO, ça marche du tonnerre 8)

Trois ans pour une reponse, de quoi me plaint-je ?
Quand vous ne me repondez pas dans la journée :lol:

Code : Tout sélectionner

; http://www.purebasic.fr/english/viewtopic.php?t=30864

; A COMPILER EN "commentedASM.exe" 
; Déposer dans le repertoire compiler
; Creer un outil personalisé avec le menu Outils/Outils personalisés
; Taper dans ligne de commande : CommentedASM.exe
; Taper dans arguments : "%TEMPFILE"   
; Taper un nom pour cet outil, moi, j'ai choisi : Viewver ASSEMBLEUR
; Cocher Démarrer caché

file$=ProgramParameter(0) 
dir$ = GetPathPart(file$) 

If file$ And FileSize(file$)>0 
  Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", Chr(34)+file$+Chr(34)+" /commented", dir$, #PB_Program_Hide|#PB_Program_Wait) 
  If Compiler  
    dir$+"PureBasic.asm" 
    RunProgram("notepad.exe", dir$,"") 
  EndIf 
EndIf 
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

3 ans, ça confirme un bon cépage...
Répondre