Logicielsmoto.com

Nous sommes le 20 Avr 2024, 04:36

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 21 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: En parlant de désassembleur
MessagePosté: 06 Mai 2006, 09:50 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Comme je ne pratique pas l'assembleur via un logiciel dédié, je me suis donc lancé dans la réalisation d'un désassembleur/éditeur sur nos machines favorites. J'ai donc mis de côté tous mes autres projets pour me consacré à ce dernier. :sol:

Dans sa première version, ce sera un simple dumpeur affublé d'une fonction désassemblage-édition-recherche(ascii ou hex)-exécuter avec la possibilité de changer de banque mémoire et de copier des blocks. L'interface utilisateur sera assez conviviale et les caractères redéssinés.

Pour l'instant, le mode dump fonctionne avec une partie en hex et une autre avec l'équivalence ascii. Mais, je me heurte à deux problèmes. Le premier, et sans doute le moins important, étant celui du changement de banque. La méthode en asm était indiquée sur ce forum, mais le topic a du disparaître. :( . (Yoann, pourrais-tu me l'expliquer à nouveau stp?)

Le deuxième, évidemment, est celui du désassemblage. Et là, je m'adresse surtout à Daniel. Comment dois-je m'y prendre?. Y a t-il une technique particulière?

A terme, ce programme me sera assez utile pour développer sur les vraies machines sans forcément passer par l'émulateur pc DCMOTO. De nouvelles fonctions seront rajoutées comme disk edit et peut-être... un éditeur graphique (ce sera pour la version grand luxe :lol: ).

Merci d'avance.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: telecharger un desassembleur
MessagePosté: 07 Mai 2006, 20:59 
Vous pourrez utilement télécharger un desassembleur (uniquement programmé en LM)pour TO8 et TO9+ (avec le mode d'emploi en fichier Paragraphe)
à l'URL
http://www.club-internet.fr/perso/dsmag ... desass.zip


Haut
  
Répondre en citant le message  
MessagePosté: 08 Mai 2006, 01:40 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
smague a écrit:
Vous pourrez utilement télécharger un desassembleur (uniquement programmé en LM)pour TO8 et TO9+ (avec le mode d'emploi en fichier Paragraphe)
à l'URL
http://www.club-internet.fr/perso/dsmag ... desass.zip


La disquette semble corrompue. Il y a 2 fichiers nommes "]4.BIN" (de 4 ko) et "]4.PAR" de 6 kilo. Meme en lancant "]4.BIN" avec l'option ,,R , ca ne fonctionne pas. Une idee ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: activation de l'utilitaire ]4
MessagePosté: 08 Mai 2006, 15:48 
Les deux fichiers .BIN et .PAR sont bons dans l'archive mise en telechargement.
Après lancement en mode direct par LOADM"]4.BIN" , , R - il faut taper le nouveau mot réservé M] ,pour visualiser l'invite du logiciel.
Le reste des commandes (attendues par l'invite) est donné dans le fichier Paragraphe joint.


Haut
  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 08 Mai 2006, 21:50 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Merci :) Mais, en fait, il s'agit d'une application. Et... C'est quoi ce mot réservé?

Je pense, aprés dump du logiciel que l'on peut optimiser la routine de désassemblage. ;)

Daniel, non pas smague mais coulom, Comment tu t'y es pris pour dcmoto?. Y a t-il une technique particulière? :roll:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 08 Mai 2006, 23:34 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
jasz a écrit:
Daniel, non pas smague mais coulom, Comment tu t'y es pris pour dcmoto?. Y a t-il une technique particulière? :roll:

C'est quoi ce smiley ? :voyons:

Sinon, une technique, c'est d'avoir une table, ainsi que le nombre de d'octet pour chaque commande. T'as moins de 255 instructions ($00 a $FF) donc fait un tableau de tableau ou une celule represente l'instruction, une autre le nombre d'octet qu'elle prend (entre 0 et XX)... etc ... Tu peux meme aussi avoir le nombre de cycle de chaque instruction (dans son mode d'adressage) afin de calculer le nombre de cycle d'un programme par exemple de facon a voir lequel est le plus optimise ... etc ... (D'ailleur, Daniel, si tu m'entends, sache que ce serait cool dans ton debugger ;) )


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Mai 2006, 03:34 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Yoann Riou a écrit:
jasz a écrit:
(...) :roll:

C'est quoi ce smiley ? :voyons:

Je me le demande ;)


Sinon, je vais essayer de voir avec la formule binaire, s'il n'y pas une correspondance qui pourrait m'aider d'une part à réduire la taille des datas mnémoniques et d'autre part celle du traitement de désassemblage.

Au passage, l'adresse pour changer de banque c'est bien $E7E5?!


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Mai 2006, 06:38 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
jasz a écrit:
Yoann Riou a écrit:
jasz a écrit:
(...) :roll:

C'est quoi ce smiley ? :voyons:

Je me le demande ;)


Sinon, je vais essayer de voir avec la formule binaire, s'il n'y pas une correspondance qui pourrait m'aider d'une part à réduire la taille des datas mnémoniques et d'autre part celle du traitement de désassemblage.


Alors, va la deja (mais tu dois avoir le meme tableau dans ton bouquin assembleur) :

http://koti.mbnet.fi/~atjs/mc6809/Information/6809.htm

Prennons par exemple NOP :

Op : $12
# (Nombre d'octet incluant l'operande) : 1
~ (cycle CPU) : 2

Alors, fait un tableau avec :

SizeOp[$12]=1
CycleOp[$12]=2
NameOp[$12]='NOP'

Et tu fais la meme chose pour toutes les mnemoniques dans tous les modes d'adressage. Il faudra apprendre comment les valeurs sont codees. Pour certaines, c'est simple (genre LDA #1), pour d'autres, c'est plus complique (PSHS A,B,X,Y), et pour d'autres, c'est un cauchemare ( JMP [B,X] ) ...

Il faudra voir tous les cas de figures de mode d'adressage possible pour chacunes des mnemonique. Ensuite, le dessassemblage se fera naturellement.



Citation:
Au passage, l'adresse pour changer de banque c'est bien $E7E5?!

C'est bien ca. Note que les bank en assembleur commencent a 0 et non 1 comme en BASIC.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Mai 2006, 08:22 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
jasz a écrit:
Daniel, non pas smague mais coulom, Comment tu t'y es pris pour dcmoto?

Dans DCMOTO, j'utilise des tables, comme indique precedemment par Yoann. Il y a 3 tables de 256 lignes : une pour les instructions normales, une pour les instructions avec preoctet 10 et une pour les instructions avec preoctet 11. Pour chaque instruction, la table donne le mnemonique, le type d'adressage (immediat 1 octet, immediat 2 octets, branchement court, branchement long, direct, indexe, operation sur les piles, etc.) et le nombre de cycles.
Le desassembleur retrouve le mnemonique et le nombre de cycles dans la table, et decode l'instruction en fonction du type d'adressage. Dans le cas du type 'indexe' il y a une autre table donnant les regles de decodage en fonction de l'octet suivant le code instruction.

J'ai ecrit egalement 'Desassembleur, Dump et Patch' pour MO5, en m'inspirant d'un programme publie dans Microtom. Le scan de Microtom doit etre sur le site Serveur87. Mon adaptation est en telechargement a la page Programmes du site dcmoto. Je dois avoir encore un autre programme en Basic MO5, mais je n'ai pas ose le publier a cause de sa lenteur ;)

On peut aussi trouver l'inspiration dans des desassembleurs sur PC (voir http://koti.mbnet.fi/~atjs/mc6809/). J'en ai ecrit aussi quelques-uns en C pour tester différentes techniques. En resume, on peut distinguer la methode des tables, expliquee ci-dessus, et la methode des branchements conditionnels : "switch()" en C, ou "CASE" en Basic. Il y a des avantages et des inconvenients pour chacune. Si on privilegie la vitesse d'execution, je crois que la methode des tables est meilleure.

Daniel


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 09 Mai 2006, 09:10 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
smague a écrit:
Le reste des commandes (attendues par l'invite) est donné dans le fichier Paragraphe joint.

Vous devriez donner le mode d'emploi dans un fichier texte. Le fichier .PAR n'est pas facilement accessible si on n'a pas Paragraphe. Voici ce que j'ai pu en extraire :
Code:
Le DESASSEMBLEUR est active en tapant D sur le > rouge suivi de ENTREE, puis en douceur taper 6 caractères: adresse en hexadecimal 4 caractères, 1 espace, enfin 0 si sortie sur ecran ou 1 si sortie sur imprimante. (attention plantage si pas d'imprimante!!).
Une seule ligne s'imprime, pour la suite on a le choix entre 2 modes soit le pas a pas avec la barre d'espace ou le continu avec la touche ENTREE. Dans les 2 cas l'arret provisoire s'obtient avec la barre d'espace. Redemarrage comme ci-dessus. Arret definitif avec S qui redonne le > rouge. Sortie du moniteur avec X suivi de ENTREE.

Dans ce mode d'emploi, il n'est pas precise que l'adresse hexadecimale doit etre precedee d'un blanc. Si on l'oublie la sanction est immediate et sans appel : sortie du desassembleur et message Erreur de syntaxe.
Le desassemblage n'est pas tout a fait conforme a la syntaxe preconisee par Motorola. En particulier, les instructions de depilage donnent les registres dans l'ordre inverse, et l'absence de virgule rend la lecture difficile. Les instructions de branchement ont aussi une presentation assez curieuse, avec l'adresse de branchement avant le mnemonique.
L'auteur du programme est ROBERT CAILLAT / CLUB THOMSON 1987

Daniel


Dernière édition par Daniel Coulom le 09 Mai 2006, 09:43, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Mai 2006, 09:38 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Merci Daniel ainsi que toi Yoann pour vos explications. :)

Je vais étudier la question avec le programme de Daniel C.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Mai 2006, 09:53 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
Vu que c'est marrant comme topic, je suis entrain d'ecrire un dessassembleur en PHP avec calcul du nombre de cycles ... etc ... Si c'est pas mal et que ca fonctionne, je le mettrais en ligne, de facon a pouvoir balancer au travers du net un fichier BIN thomson, et de voir le code dessassembler, et de jouer avec (changer le PC ... etc ...)

C'est marrant a faire, et instructif aussi. Vu que je n'avais jamais regarde precisement comment tout ca etait code, je viens de voir que certains opcode ne sont pas seulement 1 octet, mais 2 (10) voir 3 (11) ! :-) On en apprend tout les jours ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 09 Mai 2006, 14:43 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
:eek: Je viens de me prendre la tete sur le dessassemblage du mode indexe :mad:

Et j'ai decouvert par hazard l'appendice F du livre "programmation du 6809" qui explique tout ca bien. Ca m'a quand meme pris 2 bonnes heures pour dessassembler totallement tous les modes indexes.

Ce fut par ailleur tres instructif, je sais comment compter les cycles dans ce mode d'adressage maintenant ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 10 Mai 2006, 06:03 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 492
Petite update :

Image

(C'est un petit morceau de mon Lemmings TO qui est affiche ;) )

Toutes les instructions (dans tous les modes d'adressage) ne sont pas encore implementees, mais voila le fruit de 5 ou 6 heures de boulot.

L'interface lit directement les fichiers binaires Thomson (avec donc tous les headers, les blocks ... etc ...), met ca dans une memoire virtuelle en prennant bien sur en compte l'adresse de depart des fichiers binaires (mais peut aussi charger des fichiers binaires dont les blocs successives ne sont pas sauvee les uns a la suite des autres), desassemble page par page, indique le nombre de cycles, mode d'adressage, ainsi que des commentaires quand il y a lieu (par exemple, lorsqu'il trouve exactement $E7DA dans une valeur, on sait que ca pointe sur la palette - ca permet d'aider a la comprehension du programme lors du desassemblage)

Je vais rajouter d'autres petites fonctions comme le fait de pouvoir re-assembler des commandes de facon a voir si le nombre de cycles est superieur ou inferieur, ou faire des sauts directement en suivant les instructions de branchement. Vous l'avez compris, c'est surtout pour optimiser les programmes sur la vitesse avant tout.

Pour finir, ca fonctionne dans un navigateur, donc je pourrais le mettre en ligne si besoin est dans le future. Mais pour l'instant, j'en suis encore qu'au tout debut ;) A noter, ce n'est pas un debuggueur donc ca n'execute rien (peut etre que je rajouterais ca ... mais je n'en vois pas l'interet pour l'instant - le but n'etant pas de faire un emulateur 6809 "online")

Super comme exercice en tout cas, ca permet d'apprendre enormement ce que l'on pense deja connaitre ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 10 Mai 2006, 07:25 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Excellent travail :bien:

De mon côté, je planche encore dessus avec le temps que j'ai de disponible ;)


En regardant ton screenshoot on se rend compte que les opérations de branchement sont relativement gourmandes en TM.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 21 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 85 invités


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
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com