Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation Assembleur 68K » Conseil pour un débutant... (37 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
seb Ecrit le: Mardi 25 avril 2006 à 19:42 Déconnecté(e)    Voir le profil de seb Envoyer un email à seb Envoyer un message privé à seb  

J'ai lu dans un des sujets de ce forum qu'il ne valait pas le coup d'apprendre aujourd'hui l'assembleur A68k, en passe d'être dépasé voire abandonné. Il faudrait lui préférer l'assembleur GNU.
Pourtant, je ne trouve de tutoriels que pour le premier, rien pour l'autre (à part la documentation TGICC, qui ne convient pas à un débutant comme moi).
Alors, quel conseil me donnez-vous ?
Ce que je sais, en tout cas, c'est que je désire faire quelque pas dans le langage bas niveau, au moins par curiosité (et plus si affinité). Encore faut-il ne pas être rebuté dans le départ ni perdre son temps.

    
./Post n°1   Marquer comme non lu.
Sasume Ecrit le: Mardi 25 avril 2006 à 20:12 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

En gros, en dehors de quelques différences internes sur la façon d'assembler (qui ont quelques répercussions externes, mais peu gênantes pour débuter), a68k n'est pas un logiciel libre, contrairement à GNU AS. Mais a68k accepte la syntaxe standard (celle que tu as lue dans tous les tutoriels).
    
./Post n°2   Marquer comme non lu.
seb Ecrit le: Mardi 25 avril 2006 à 20:28 Déconnecté(e)    Voir le profil de seb Envoyer un email à seb Envoyer un message privé à seb  

Donc, tu me conseilles d'utiliser le A68k, qui est mieux documenté ?

J'aurais une autre question.

Comment lier dans un programme des parties en C et en assembleur ? Cette question me semble importante pour un débutant.
D'après ce que j'ai lu et compris, un des problèmes de l'assembleur est qu'il n'offre pas de moyen commode pour afficher un résultat (le print du basic que je pratiquais il y a longtemps) ou pour récupérer une donnée saisie (le input du même langage). Pour apprendre l'assembleur, il serait donc souhaitable de traiter les données (calculs, mémoire, etc.) dans des parties en assembleur, et d'organiser l'interface avec l'utilisateur en C.

Merci d'avance.
    
./Post n°3   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 25 avril 2006 à 21:07 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


A68k est obsolète, non-libre et très mal documenté (compare la doc de A68k avec celle de GNU as, et encore, les directives de A68k n'étaient pas du tout documentée, c'est moi qui ai écrit cette doc). Bref, je te conseille GNU as. Beaucoup de tutoriels utilisent A68k, mais c'est parce que ces tutoriels commencent à dater (c'est le cas pour mon tutoriel _nostub aussi). Tu trouveras un début de tutoriel pour GNU as sur http://www.technoplaza.net/assembly/ (cela dit, il n'y a que 3 leçons... de plus, je ne comprends pas exactement pourquoi il met .comm _nostub,2, un simple .xdef _nostub suffit; il manque aussi le .xdef _v200).
-Edité le Mardi 25 avril 2006 à 21:10 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°4   Marquer comme non lu.
seb Ecrit le: Mardi 25 avril 2006 à 21:34 Déconnecté(e)    Voir le profil de seb Envoyer un email à seb Envoyer un message privé à seb  

Voici un avis contradictoire... Me voilà bien embêté !
Je veux bien (débutant, donc libre) m'acclimater à la syntaxe du GNU as (plus lourde a priori, en jetant un coup d'oeil aux fichiers générés par le compilateur TGICC), mais il manque cruellement de ressources pour un débutant. J'ai regardé rapidement le tutoriel en suivant ton lien. Apparemment, ça a l'air bien fait... Mais y aura-t-il une suite ? (par exemple, sur squalenet, on trouve un débu de tutoriel sur l'A68k très bien fait pour démarrer, mais qui n'aura jamais de suite, dixit l'auteur).
De toute façon, il faut bien reconnaître que les documents disponibles en ligne sur l'a68k date un peu (vers 2000-2001 pour les plus récents).
Bref, tout ceci revient à dire qu'il est temps, pour accompagner le passage de l'un à l'autre (s'il doit se faire), de rédiger des aides sur le GNU as accessibles aux débutants... C'est facile à dire, surtout pour qui est incapable de le faire et conseille aux autres de s'y coller !

Sinon, je reviens à ma question : comment faire pour lier des parties en assembleur (pour apprendre à manier le langage) et des parties en C (pour vérifier le bon fonctionnement du programme) ? Apparemment, le compilateur doit organiser des liens... Mais en fait, je n'y comprends rien (la documentation TIGCC s'adresse le plus souvent à des initiés et est difficile, pour moi en tout cas).

    
./Post n°5   Marquer comme non lu.
Jfg Ecrit le: Mardi 25 avril 2006 à 23:09 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


C'est pas parceque c'est libre que c'est mieux (cf Open Office vs Microsoft Office, ou tout simplement Linux vs Windows...). C'est une idée imprimé par le lobby Linuxien que l'on doit en grande parti du au tristement célèbre Linus Torvald.
Malheuresement, les gens que je qualifirait de "simple" arrive difficilement à ouvrir leur esprit et de voir la réalité.

Tout ça pour dire qu'il faut pas partir avec des a prioris.

Ce que tu devrais considérer, c'est le fait que dans beaucoup d'écoles d'informatiques (toutes?), on apprend à programmer le 68000 avec l'A68k. Après tout c'est normal, ça apprend à lire la doc du constructeur et pas avec une syntax fantaisiste qui sort de la cuisse de Jupiter.


[Onur|valid]
-Edité le Mardi 25 avril 2006 à 23:14 par Jfg-
Kill Mario
    
./Post n°6   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 25 avril 2006 à 23:43 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Jfg :
Ce que tu devrais considérer, c'est le fait que dans beaucoup d'écoles d'informatiques (toutes?), on apprend à programmer le 68000 avec l'A68k.

Euh, non, je ne pense pas. Avec un assembleur qui parle à peu près la même syntaxe, peut-être, mais A68k, non. Ces écoles travaillent avec des simulateurs Unix ou de très vieux serveurs Unix, et A68k est un assembleur Amiga, donc impossible d'utiliser A68k dans leur environnement.

Après tout c'est normal, ça apprend à lire la doc du constructeur et pas avec une syntax fantaisiste qui sort de la cuisse de Jupiter.

Euh, GNU as comprend à peu de choses près la syntaxe de Motorola. Les % devant les registres, c'est pour éviter la confusion avec des labels/variables de même nom, et il y a le switch --register-prefix-optional qui permet de ne pas les mettre.

Quant aux trolls sur Linux, ils ne méritent pas de réponse, si ce n'est que j'utilise Linux pratiquement exclusivement en ces jours et ne regrette en rien Window$.

seb :
Sinon, je reviens à ma question : comment faire pour lier des parties en assembleur (pour apprendre à manier le langage) et des parties en C (pour vérifier le bon fonctionnement du programme) ? Apparemment, le compilateur doit organiser des liens... Mais en fait, je n'y comprends rien (la documentation TIGCC s'adresse le plus souvent à des initiés et est difficile, pour moi en tout cas).

De la même manière que tu manies plusieurs fichiers C. Les choses auxquelles faire attention:
  • ne pas mettre des .xdef contrôlant des options du linker du genre _nostub, _ti89 etc., c'est au programme principal en C de choisir les options du linker
  • en C, une fonction est automatiquement visible aux autres fichiers .c ou .s sauf si on met static; en ASM, c'est le contraire, il faut mettre .xdef nomdulabel pour "exporter" nomdulabel (le rendre visible aux autres fichiers source)
  • attention à la convention d'appel pour les fonctions ASM appelables en C: http://tigcc.ticalc.org/doc/asminfo.html

Le linker fait plein de choses en interne (et c'est ça que la documentation du linker décrit), mais pour débuter, tu n'as probablement pas besoin de connaître tout ça, tu crées juste tes n fichiers et le linker les linkera pour toi.

[EDIT: orthographe]
-Edité le Mercredi 26 avril 2006 à 14:48 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°7   Marquer comme non lu.
Sasume Ecrit le: Mardi 25 avril 2006 à 23:50 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

[cross - vous vous en seriez douté]

Seb> Tu noteras qu'il n'y a aucun argument concret dans ce qu'à dit Kevin Kofler :
- obsolète : il dit ça pour inciter à utiliser GNU AS, mais concrêtement le seul vrai défaut de a68k pour moi c'est qu'il accepte des instructions invalides.
- non-libre : on s'en fout.
- mal documenté : c'est faux, la preuve toi même tu as trouvé plus de docs pour coder avec a68k qu'avec GNU AS.

Cela dit, je ne connais pas en détails ces deux assembleurs, peut-être qu'effectivement a68k est réellement obsolète, mais j'aimerais avoir plus de détails dans ce cas.

Quoi qu'il en soit, la majeure différence entre GNU AS et a68k est la syntaxe (qui malheureusement n'est pas standard chez GNU AS, et c'est vraiment dommage, sans ça la question ne se poserait quasiment pas).
La syntaxe de GNU AS n'est pas si compliquée, même si elle est très lourde à utiliser, tu trouveras quelques informations ici : http://tigcc.ticalc.org/doc/gnuasm.html#SEC25

Pour utiliser du C avec de l'ASM, ce n'est pas très compliqué.
Il faut savoir que le C est un langage compilé : du code machine est produit.
L'assembleur est aussi du code machine, après qu'il ait été lu par a68k ou GNU AS.
La liaison entre les deux s'effectue par le linker (ou éditeur de liens), qui se charge de lier plusieurs fichiers objets entre eux. Des fichiers objets sont des fichiers contenant du code machine (donc produits par un compilateur à partir de sources C ou par un assembleur à partir de sources en assembleur) et quelques informations supplémentaires comme des noms de symboles exportés. Ces symboles peuvent être des noms de fonctions ou de variable, le linker ne fait pas la différence entre eux.
Donc pour utiliser des fichiers objets issus d'assembleur, dans tes sources en C, il faut que tu informes le compilateur que tu vas exploiter des symboles définis dans d'autres fichiers objets que le fichier source C que tu seras en train d'écrire, pour cela, deux cas :
- Pour les variables, tu dois les déclarer en faisant précéder la déclaration du mot-clé "extern" (pour bien indiquer que la vraie variable se situe ailleurs).
- Pour les fonctions, tu dois les déclarer en précisant la façon dont on doit les appeler (où sont attendus les paramètres), c'est-à-dire que tu dois donner leur prototype.
Pour interfacer du C avec tes sources ASM, c'est plus simple, tu n'as rien à faire. Tu peux exploiter comme tu veux tous les noms de symboles qui seront exportés dans les modules objets issus de la compilation de tes sources C.

Un petit exemple pour illustrer tout ça :
#include <tigcclib.h>

extern short nombre;

void _main(void)
{
  scanf("%d",&nombre);
  fonction_asm();
  printf("%d\n",nombre);
}

void fonction_c()
{
  nombre = nombre + 1;
}


  .data
  .even
  .global nombre
nombre:
  .word 0

  .text
  .global fonction_asm
fonction_asm:
  jbsr fonction_c
  rts


Voilà, j'espère que mon exemple marche, je n'ai pas testé et je n'ai pas du tout l'habitude de coder avec GNU AS.
Il faut que tu mettes ces deux fichiers dans un projet que tu créeras dans TIGCC IDE et compiler en _nostub, en précisant pour quels modèles tu veux fournir la sortie.
-Edité le Mardi 25 avril 2006 à 23:52 par Sasume-
    
./Post n°8   Marquer comme non lu.
geogeo Ecrit le: Mercredi 26 avril 2006 à 00:26 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Comme quoi le mieux est de connaître les 2 et de se faire sa propre opinion des choses.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°9   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 26 avril 2006 à 14:42 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Sasume :
Seb> Tu noteras qu'il n'y a aucun argument concret dans ce qu'à dit Kevin Kofler :

L'argument concret, c'est que A68k va bientôt disparaître de TIGCC et que je ne peux pas promettre qu'il y aura un remplacement compatible. Avec les relicenciements ExePack en cours, il est très probable que TIGCC 1.0 sera 100% libre en tout cas, et ce ne sera pas pour un assembleur obsolète que je ferai une exception.

- obsolète : il dit ça pour inciter à utiliser GNU AS, mais concrêtement le seul vrai défaut de a68k pour moi c'est qu'il accepte des instructions invalides.

C'est déjà un gros défaut.
Il y a aussi:
  • syntaxe qui dépend de l'indentation #sick#
  • possibilité d'utiliser le même nom pour un label et une instruction ou macro #sick#
  • assembleur abandonné par son auteur en 1991 (!), personne n'a même corrigé des bogues (et il y en avait des tonnes) entre 1991 et 2001 (heureusement que je m'en suis occupé en 2001, parce que A68k était très bogué avant! Certains "kits de développement" obsolètes pour TI distribuent toujours la version boguée d'ailleurs)
  • code peu adaptable, tout est codé en dur (style de codage obsolète: c'était le moyen d'obtenir un maximum de vitesse aux temps de l'Amiga, maintenant ça fait juste ch**r ceux qui comme moi essaient de rajouter des fonctionnalités dans le linker qui ont besoin de fonctionnalités correspondantes dans l'assembleur (par exemple l'optimisation des relogements, le code pour permettre ça dans A68k est un hack sauvage, où des variables globales sont utilisées en dehors des structures de données passées en argument par les fonctions, bref c'est vraiment impossible à maintenir à long terme)
  • la licence interdit l'usage commercial et n'autorise même pas clairement la modification! Quand l'auteur a sorti ses sources en 1991, il était plus ou moins impliqué que c'était pour permettre leur modification, mais nulle part dans la licence n'est-il écrit que c'est permis!
  • Charlie Gibbs a repiqué le code de Brian Anderson qu'il a trouvé dans un magazine, et je n'ai pas l'impression qu'il ait demandé son avis ou celui du magazine.

Bref, non seulement A68k est obsolète et non-libre, mais il y a des doûtes sur sa légalité.

- non-libre : on s'en fout.

Toi peut-être... #roll#

- mal documenté : c'est faux, la preuve toi même tu as trouvé plus de docs pour coder avec a68k qu'avec GNU AS.

Je pense qu'on n'est pas d'accord sur la définition de "docs". Toi, tu parles de tutos de programmation TI. Moi, je parle de documentations au sens strict, c'est-à-dire des documentations qui décrivent de manière complète la ligne de commande (OK, ça, A68k l'a), la syntaxe générale de l'assembleur (documentée nulle part dans A68k, il y a écrit où que ; est le caractère qui introduit un commentaire? qu'un identifiant dans la colonne 1 est un label et dans une autre colonne une instruction? les modes d'adressage possibles et leur notation? ... Dans GNU as, il y a un chapitre dédié à ça!), la syntaxe et le comportement des directives (ça, A68k l'a seulement parce que des gens comme Mathieu Lacage et moi ont écrit des docs - d'ailleurs, le DIRECT.TXT de Mathieu Lacage était largement incomplet, j'ai été obligé d'utiliser la source pour documenter ces directives), le fonctionnement interne de l'assembleur (A68k n'a strictement aucune doc de ce genre) etc. Un tuto ne décrit toujours qu'une partie d'un logiciel, ce n'est pas un substitut pour une doc. (C'est ce que j'essaie de faire comprendre à Onur et FpgForce aussi...)

Cela dit, je ne connais pas en détails ces deux assembleurs, peut-être qu'effectivement a68k est réellement obsolète, mais j'aimerais avoir plus de détails dans ce cas.

Tu les as. :)
Il y a aussi que A68k ne gère pas les flags "mergeable" et "unaligned" pour les sections utilisées pour le constant merging, je pourrais les rajouter, mais ça rendrait le code encore plus foireux (cf. plus haut) et serait probablement très peu utilisé par les codeurs ASM (c'est un feature visant primairement le C, permettant d'unifier les usages de litéraux de chaînes de caractères (ex.: "toto") à travers les fichiers source).

Quoi qu'il en soit, la majeure différence entre GNU AS et a68k est la syntaxe (qui malheureusement n'est pas standard chez GNU AS, et c'est vraiment dommage, sans ça la question ne se poserait quasiment pas).

Je ne vois pas trop ce qui n'est "pas standard" dans la syntaxe de GNU as. GNU as accepte la syntaxe standard de Motorola et la syntaxe développée par le MIT (ces syntaxes sont compatibles dans le sens où tout ce qui est valide dans l'une soit est valide et a le même sens dans l'autre, soit n'est pas valide dans l'autre, donc GNU as peut accepter les deux sans problèmes). Je veux que tu me cites la ligne du manuel de Motorola où il est écrit que l'assembleur doit reconnaître les labels à travers l'indentation et pas à travers le : à la fin (ce qui me paraît beaucoup plus logique). La seule chose qui n'est "pas standard", c'est les % devant les registres, mais j'ai déjà dit pourquoi c'est comme ça (conflit avec les identifiants C) et comment les rendre optionnels (attention, ce qui interdit aussi l'usage des noms de registres comme identifiants en C!!!). A68k n'en a rien à f**tre du C, GNU as a été développé pour l'usage avec le C, c'est pour ça qu'il y a les %.

La syntaxe de GNU AS n'est pas si compliquée, même si elle est très lourde à utiliser, tu trouveras quelques informations ici : http://tigcc.ticalc.org/doc/gnuasm.html#SEC25

Je ne vois pas ce qui est "lourd" à part les % => --register-prefix-optional.
-Edité le Mercredi 26 avril 2006 à 14:59 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°10   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 26 avril 2006 à 14:58 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Sasume :
  .data
  .even
  .global nombre
nombre:
  .word 0

  .text
  .global fonction_asm
fonction_asm:
  jbsr fonction_c
  rts

Ce code est correct. Cela dit, de nos jours, le compilateur C crée, par défaut (si on utilise l'IDE), une section par fonction ou variable (les paramètres -ffunction-sections -fdata-sections sont mis par défaut dans l'IDE, et fortement conseillés pour ceux qui utilisent la ligne de commande). Ceci permet au linker de réordonner les sections afin de minimiser la taille des références, ce qui permet de réduire le nombre de relogements et rend le code plus petit et plus rapide. En ASM, ça donne:
  .section .data.nombre,"d"
  .even
  .global nombre
nombre:
  .word 0

  .section .text.fonction_asm,"x"
  .global fonction_asm
fonction_asm:
  jbsr fonction_c
  rts

"d" = section de données (.data), "x" = section de code (.text)
Quant aux données à lecture seule (.rodata), sur TI, il n'y a pas de type de section dédié. Normalement, .rodata est traîté comme .data. TIGCC permet aussi de traîter .rodata comme .text, ce qui pourra servir pour du code en FlashROM (FlashOS, FlashApps), mais actuellement la gestion des FlashOS ne permet pas les .data modifiables (il faut utiliser des adresses absolues pour les variables si on code un OS, c'est ce que fait le code de PedroM), et les FlashApps ne sont pas supportées, donc cette feature n'est utilisée nulle part pour le moment. Bref, il suffit de se rappeler de "sur TIGCC, .rodata = .data" pour le moment.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°11   Marquer comme non lu.
Sasume Ecrit le: Mercredi 26 avril 2006 à 16:43 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

OK, merci bien pour ces précisions.

La solution pour résoudre les problème des '%' n'est pas terrible si elle empêche le code C d'utiliser certains noms de variables, mais bon, au moins ça améliore la syntaxe.
    
./Post n°12   Marquer comme non lu.
Sasume Ecrit le: Mercredi 26 avril 2006 à 17:04 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Pourquoi pedrom ne peut pas être compilé avec GNU AS ?
    
./Post n°13   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 26 avril 2006 à 19:29 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Sasume :
La solution pour résoudre les problème des '%' n'est pas terrible si elle empêche le code C d'utiliser certains noms de variables, mais bon, au moins ça améliore la syntaxe.

C'est pour ça que ce n'est pas le défaut... Et je ne vois toujours pas en quoi c'est un "problème" (mis à part que tu es visiblement trop paresseux pour les taper).

Sasume :
Pourquoi pedrom ne peut pas être compilé avec GNU AS ?

Es-tu volontaire pour convertir les milliers de lignes d'A68k?
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°14   Marquer comme non lu.
Sasume Ecrit le: Mercredi 26 avril 2006 à 20:39 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Le pb des %, c'est que d'une part, c'est vrai que ce n'est pas commode à taper (avec un azerty en tout cas), et d'autre part, ça alourdit la lisibilité des sources.
Ce n'est pas hyper important, mais ça compte quand même.

Pourquoi il faut convertir le code de PedroM, puisqu'avec l'option --register-prefix-optional on n'a plus besoin de s'occuper des % ? Il y autre chose qui pose problème à GNU AS ?
    
./Post n°15   Marquer comme non lu.
Link Ecrit le: Mercredi 26 avril 2006 à 21:56 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

Les directives, entre autres, à mon avis.

Moi, j'ai appris l'assembleur 68000 avec X68K, un assembleur fourni avec un IDE appelé "68k editor". La syntaxe était celle de A68K, sauf pour les commentaires unilignes qui devaient commencer par '*'.
Ce que j'aimais bien, c'était le simulateur DOS livré avec, qui avait plein d'appels système intéressants pour les entrées-sorties...

PS: Kevin: que veux-tu dire par "la syntaxe dépend de l'indentation" ? Si c'est le truc colonne 0 / colonne non-zéro, il me semble que c'est le standard et que c'est le cas pour tous les assembleurs (sauf peut-être GNU), ça...
    
./Post n°16   Marquer comme non lu.
seb Ecrit le: Mercredi 26 avril 2006 à 22:41 Déconnecté(e)    Voir le profil de seb Envoyer un email à seb Envoyer un message privé à seb  

Je suis en train de lire le tutoriel sur le GNU as.
C'est bien fait, mais parfois trop rapide.
Par exemple,
link %a6,#0
est censé chargé le registre a6 avec l'adresse courante du pointeur de pile.
Que veut dire le #0 là-dedans ?
Est-ce que, par hasard,
link %a6,#4
chargerait le registre a6 avec l'adresse courante du pointeur de pile +4 octets (ou -4 octets) ?
Ceci n'est pas expliqué...
    
./Post n°17   Marquer comme non lu.
Kevin Kofler Ecrit le: Mercredi 26 avril 2006 à 23:18 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Sasume :
Le pb des %, c'est que d'une part, c'est vrai que ce n'est pas commode à taper (avec un azerty en tout cas),

Avec mon QWERTZ, ce n'est pas plus compliqué que °!"§$&/()=? et l'accent grave qui sont dans la même ligne (première ligne shiftée).

et d'autre part, ça alourdit la lisibilité des sources.

La coloration syntaxique, tu connais? Tu peux configurer les % comme étant très clairs (ou très foncés sur un fond noir) s'ils te dérangent tellement.

Ce n'est pas hyper important, mais ça compte quand même.

Si ce n'est que ça ton excuse pour ne pas utiliser GNU as, faudra en aller chercher une meilleure.

Pourquoi il faut convertir le code de PedroM, puisqu'avec l'option --register-prefix-optional on n'a plus besoin de s'occuper des % ? Il y autre chose qui pose problème à GNU AS ?

Oui, il y a pleins d'autres détails de syntaxe qui changent: préfixes pour hexa et binaire, caractère pour les commentaires, syntaxe sensible ou non à l'indentation (PedroM utilise plein de labels sans :), syntaxe et fonctionnement des labels locaux, ...

Link :
PS: Kevin: que veux-tu dire par "la syntaxe dépend de l'indentation" ? Si c'est le truc colonne 0 / colonne non-zéro

Exactement, et GNU as ne fait pas ça, je peux écrire toutes mes instructions dans la colonne 0 et ça ne change rien pour GNU as. (Les labels sont reconnus à travers le : après l'identifiant.)

seb :
Par exemple,
link %a6,#0
est censé chargé le registre a6 avec l'adresse courante du pointeur de pile.
Que veut dire le #0 là-dedans ?
Est-ce que, par hasard,
link %a6,#4
chargerait le registre a6 avec l'adresse courante du pointeur de pile +4 octets (ou -4 octets) ?
Ceci n'est pas expliqué...

Le #0 est la taille du stack frame, c'est-à-dire de l'espace réservé aux variables locales.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°18   Marquer comme non lu.
Pollux Ecrit le: Jeudi 27 avril 2006 à 00:36 Déconnecté(e)    Voir le profil de Pollux Envoyer un email à Pollux Envoyer un message privé à Pollux  

Conseils :
- a68k est très bien, c'est ce qu'utilisent la plupart des tutos et la plupart des programmeurs asm (il n'y a que Kevin Kofler qui milite à fond contre)
- link est une des instructions les plus inutiles/inefficaces, j'aurais tendance à te conseiller de ne t'en servir que quand tu sauras t'en passer (sinon tu risques de ne pas faire attention à bien dépiler les arguments)
- pour savoir ce que font les instructions tu peux lire le 68kguide, c'est probablement le plus complet ^^
    
./Post n°19   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 27 avril 2006 à 00:54 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


A68k ne fera plus partie de TIGCC (l'environnement de développement TI le plus puissant et le plus complet et le seul qui permet de coder en C) d'ici quelques mois. Si vous voulez vous embarquer sur une voie sans issue, allez-y.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
  :: Index » Forum Ti68K » Programmation Assembleur 68K » Conseil pour un débutant... (37 réponse(s))
Pages : 1/2     « [1] 2 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 93.43ms avec 18 requetes