Cette page décrit l'assembleur de YASEP et les conventions de langage utilisées pour écrire un logiciel pour YASEP. Pour obtenir des informations sur une instruction en particulier, consultez la carte des opcodes et les pages du manuel sur le jeu d'instruction.
Cette page couvre les points suivants :
L'assembleur de YASEP est divisé en deux couches :
Ou peut etre que l'assembleur haut niveau va simplement etre implemente comme une fonction de listed.
Les instructions de YASEP sont vraiment tres simples mais elles ne sont pas encore tout a fait pratiques, alors certains opcodes vont demander des modifications mineures (voir ici). Elles ne sont generalement pas critiques et n'ont pas d'impact sur l'architecture, mais elles rendront les instructions plus utilisables en aidant le flux d'instructions a etre plus efficace.
Le but du langage assembleur est de permettre au developpeur de logiciels de ne pas penser aux details de l'architecture. Ainsi ce precise la premiere regle : Le registre de destination est le dernier de la ligne.
et c'est tout ce qu'il y a a dire au sujet de la "syntaxe d'entree".
Les nombres sont toujours sorti en hexadecimal et sont acceptes dans trois formats :
Les nombres sont souvent utilises dans les contextes ou le nombre de bits significatifs est limite par la taille du conteneur (habituellement, le champ immediat optionnel). Quand les bits sont en entree, l'assembleur conserve seulement le nombre desire de bit de poid faible, et efface les bits de poids forts. L'exemple suivant montre comment le nombre est tronque : db 1234h.
Un nombre ilimite de nombre literaux est accepte (depuis le 4/04/2007 et la limite depend du moteur JavaScript, pas du design de l'assembleur). La fenetre flottante de l'assembleur n'affichera pas tout les chiffres quand plus de 32 bits seront donnes mais ils seront disponibles dans le logiciel (en definissant la fonction emit_bin() ).
Exemple : db 12h 34h 56h 78h 9Ah BCh DEFh
la sortie de emit_bin() :
La capacite d'inclure les chaine ASCII est abandonnee a cette etape de l'ecriture.
Depuis aout 2008, YASEP existe en version 16 et 32-bits. Les opcodes ne changent pas mais quelques uns inutiles en mode 16 ou 32-bits. Le code source peut specifie qu'une de ces largeur est utilisee et un warning est emi quand une instruction inutile (probabement invalide pour le CPU donne) est is assemble.
YASEP16 specifie que le CPU cible a un champ de 16 bits. Toutes les instructions en 16 bits seulement genere un warning.
YASEP32 specifie que le CPU cible a un champ de 32 bits. Toutes les instructions en 16 bits seulement genere un warning.
YASEP indique que le CPU cible est indefini.
Les pseudo-instructions ne generent aucun code et peuvent etre utilisee dans n'importe quel ordre, puisque qu'elle controle simplement un drapeau interne. Ce drapeau est compare avec chaque drapeau d'instruction (voir YASEP32_ONLY et YASEP16_ONLY en dessous).
L'encodeur d'instructions reconnait les symboles suivants et rejette tout le reste :
Il y a deux types d'alias : les alias de forme (voir ALIAS_RR) et les alias d'instruction (ils sont denombres sous la carte des opcodes). Cette section parle des alias d'instructions.
En interne, ils peuvent etre utilises comme des instructions normales mais ils permettent differentes formes et/ou differentes semantiques. Cependant, ils utilisent des opcodes reels d'autres instructions. La substitution est effectuee au niveau de l'assembleur et le desassembleur ne pourra probablement pas deviner que etait l'alias original. Ne soyez pas surpris si les instructions comme NOT ou NEG s'assemble correctement mais que le desassembleur retourne un opcode different.
Les formes d'instruction variees sont decrites dans la page instructions.html.
Les drapeaux ont egalement leur propre page.
En temps normal, toutes les donnees, champs ou valeurs non initialisees sont mise a zero.
Cependant, quand certains champs d'instructions ne sont pas utilises (par FORM_ALONE ou FORM_R...), Ces champs doivent etre initialises avec les valeurs choisies par l'assembleur, pour reduire la consommation de courant.
Toggle minimization and toggle spacing pourrait aider a reduire la consommation de courant and les emissions EMI. L'assembleur de YASEP sera capable de calculer les bonnes valeurs assez facilement. Le remplissage de Imm16s et de NOPs peut etre ameliore de cette facon. La possible redution est plutot faible, mais pourrait peut etre atteindre 5% quand on charge les instructions depuis une SDRAM externe ? Essayez avec et sans, meme avec les EMI et les toggles a fond, pour voir.