Accueil > Forum > > > > Faire des conditions sans instruction J*
Faire des conditions sans instruction J*
mercredi 22 juin 2005 à 11:08:00 |
Faire des conditions sans instruction J*

grandvizir
|
Bonjour,
Quand je fais un programme Delphi, je dois souvent faire des IF : if MaVariable then {quelque chose};
Qui se traduit par les instructions ASM suivantes: CMP ou par la succession TEST LEA JNE/JE
Je me demandais si on ne pouvait pas faire des instructions conditionnelles sans faire apparaître de telles commandes ASM, histoire qu'elles passent un peu plus inaperçues ?
Je m'en réferre donc aux gourous de l'assembleur... Cordialement
============= ViewVite : HTML
|
|
mercredi 22 juin 2005 à 12:41:52 |
Re : Faire des conditions sans instruction J*
|
mercredi 22 juin 2005 à 14:06:45 |
Y'a toujours de la gruge !

grandvizir
|
C'est sympa patatelo, mais je dirais qu'il y a toujours un CMP...  J'ai classé la question en "Delphi + ASM", donc ça risque d'être chaud par ce que la syntaxe n'est pas pareil... Mon idée était de faire un truc du genre: var AdressesFichier : array[boolean] of Label = (Label1, Label2); b : boolean begin b:=true; goto AdressesFichier[b]; asm Label1: //si valeur fausse de b JMP @Sortie Label2: //si valeur vraie de b //JMP @Sortie Sortie: end; end;
On fait un saut en considérant des tableaux, et a priori, il n'y a pas besoin de faire des conditions, sachant que boolean est un type énuméré (il se comporte comme de nombre). Techniquement, il y a des choses qui ne se font pas...  Alors   ============= ViewVite : HTML
|
|
jeudi 23 juin 2005 à 10:13:33 |
Re : Faire des conditions sans instruction J*

patatalo
|
re,
a ce moment là, la demande devrait etre Faire des conditions sans instruction C*
@++
|
|
jeudi 23 juin 2005 à 11:36:25 |
Re : Faire des conditions sans instruction J*

Nasman
|
Je pense que plusieurs solutions sont possibles à partir du moment ou
le résultat d'une comparaison a été stocké quelque part (par exemple
AND eax,eax affecte les flags de signe, de zero etc). Tu peux alors
faire un jmp indirect à partir d'une table dont l'adresse pointée
dépendra du résultat de ta comparaison.
Autre solution pour la discretion, leurrer un désassembleur en effectuant un décalage des octets.
depart: mov eax,dword 0x12345678
jmp depart+13
add eax,0x432b0000
or eax,0x04eb0374
ret
nop
nop
nop
ret
après desassemblage celà donne
00000205 B878563412 mov eax,0x12345678
0000020A E903000000 jmp 0x212
0000020F 0500002B43 add eax,0x432b0000
00000214 0D7403EB04 or eax,0x4eb0374
00000219 C3 ret
0000021A 90 nop
0000021B 90 nop
0000021C 90 nop
0000021D C3 ret
Il ne semble pas y avoir de comparaisons ; par compte à l'exécution il
en sera tout autrement. En effet le jmp envoie à une l'adresse 212 où
se trouvent les octets suivants:
212 2B430D sub eax,[ebx+0xd] comparaison
215 7403 jz
21A
si nul aller en 21A
217 EB04 jmp short
21D sinon terminé
|
|
jeudi 23 juin 2005 à 14:37:32 |
Delphi est limité

grandvizir
|
Au final, je pense que Delphi n'est pas suffisamment avancé pour ce genre de trucs. Comment lui dire de sauter à une adresse qui se situe dans des lignes prochainement interprétées. La fenêtre CPU du logiciel propose les codes ASM associés aux commandes Pascal, mais tout ça va finir par devenir de la bidouille. Alors, étant propre, je ne ferais rien. C'était juste une petite curiosité technique... Si des membres ont d'autres propositions, n'hésitez pas à les déposer...  ============= ViewVite : HTML
|
|
vendredi 24 juin 2005 à 11:43:55 |
Re : Faire des conditions sans instruction J*
|
vendredi 24 juin 2005 à 15:03:27 |
Re : Faire des conditions sans instruction J*

Nasman
|
Réponse acceptée !
En fait une bonne partie des instructions assembleur affecte les flags
(signe, carry, ...), il est possible de convertir le résultat, retenue
par exemple, en un offset qui permettra de moduler un déplacement.
A partir du moment ou le registre d'état aura été affecté les instructions suivantes:
LAHF, RCL (RCR), SALC permettront de définir un déplacement qui pourra être mis à profit lors d'un JMP indirect.
Autre possibilité de saut (à risque), utiliser les instructions suivantes:
instuction précédente xxx
instruction de saut
Call Routine
instruction normale après appel yyy
Routine
comparaison (discrète)
calcul d'une adresse
mov [esp],adresse souhaitée
ret
L'instruction mov [esp],adresse remplace l'adresse de retour empilée
(eip) par la nouvelle adresse. Le Call est en fait un jump déguisé
|
|
vendredi 24 juin 2005 à 16:21:48 |
J'ai pensé à autre chose

grandvizir
|
Je pensais faire une autre structure : var NbJump : array[boolean] of byte = (3,6); //nombre d'instructions ASM-compilé à sauter b : boolean; label Sortie: begin b:=true; asm JMP AdresseEnCours + NbJump[b] end; //PREMIERE PARTIE: valeur FALSE JAppelleLaFonctionNumeroUn; goto Sortie: //DEUXIEMME PARTIE: valeur TRUE JAppelleLaFonctionNumeroDeux; Sortie: end;
Le fait de faire un appel à fonction devrait forcer l'optimiseur de Delphi à faire un CALL, ce qui réduit le nombre d'instructions à sauter... Ainsi, la première cellule de NbJump est le nombre d'instuctions entre JMP et l'appel à fonction N°1, la deuxième cellule entre JMP et l'appel à la fonction N°2. On s'aidera de la fenêtre CPU afin de déterminer ces nombres... On résumé, ma question est: comment dire à l'ASM de Delphi de sauter N instructions de code compilé  Après, ça devrait se simplifier... Note importante: la technique de résolution doit être très propre. Pas de bidouille !  ============= ViewVite : HTML
|
|
vendredi 18 août 2006 à 10:53:23 |
Tableaux de sauts

grandvizir
|
Réponse acceptée !
J'ai trouvé la solution pour Pascal... et vient de remarquer l'exactitude des informations de Patatalo et Nasman. Mais c'est tellement technique que Delphi ne l'autorise pas facilement. Merci à vous. 
program Saut;
procedure Faux; begin //le code end; procedure Vrai; begin //le code end;
const TableSaut : array[boolean] = (Faux, Vrai); var Condition : boolean; begin Condition:=true; TableSaut[Condition]; end.
Il suffit tout simplement de faire un tableau de procédures. C'est ce qui se fait aussi en asm.
============= ViewVite XP : HTML
|
|
Cette discussion est classée dans : asm, instruction, conditions, instructions
Répondre à ce message
Sujets en rapport avec ce message
Instructions ASM [ par BarthOlivier ]
Salut a tous.Je voudrais savoir où je pourrais trouver tout le jeux d'instruction disponible pour un processeur recent (type P3 ou P4 par exemple).Est
instruction MID(vb) en ASM [ par flagyg ]
Bonjour,J'essaye de traduire des codes que j'ai fait en vb en asm. mais je n'arrive pas à programmer la fonction mid.Qqn pourrait me la programmer svp
Cherche doc instructions asm x86... [ par akboy7015 ]
Bonjour a tous...J'ai beau eu cherché sur ce site dans le forum, je ne trouve aucun lien vers une bonne doc assembleur x86 faisant la liste de toutes
Jeux d'instruction ASM [ par Neonapster ]
Bonjour,On trouve beaucoup de docs sur les instruction asm en anglais.Connaissez vous un lien proposant des infos sur les instructions en FR le plus c
scmos.asm [ par henri12 ]
salutil est ou scmos.asmje le trouve pas
Où avez vous appris l'assembleur [ par Joe0557 ]
Bonjour, Je m'interresse depuis quelques temps à la programmation en ASM, mon projet final serait de faire un OS (je sais qu'il est très compliquer d'
feu tricolor ave asm [ par hassan85281 ]
qui peu m'aidé et a ecrire un programme de feu tricolor avec l asm ,je trouve un exemple avec le emulateur8086 mais sa ne suffit pas .
Lire et modifier la RAM [ par bilaloch ]
Bonjour à tous, J'aimerais savoir s'il y a une possibilité pour que, à travers le C++ (ou l'ASM d'ailleurs, je poste ce message sur le forum de l'ASM
Afficher le contenu d'un registre [ par Anakinele ]
Bonjour !Grand débutant en ASM je cherche 'simplement' (rien ne semble simple en asm !) à afficher dans la console le contenu d'un registre choisi au
Livres en rapport
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|