6
votes

Avez-vous des suggestions pour ces mnémoniques de l'Assemblée?

Le dernier semestre au collège, mon professeur de la classe de langues informatiques nous a appris le langage ésotérique nommé Whitpace . Dans l'intérêt d'apprendre la langue mieux avec un horaire très chargé (MIDTERMS), j'ai écrit un Interprète et Assembleur dans Python . Un Langue de montage a été conçu pour faciliter facilement les programmes d'écriture et un exemple programme a été écrit avec l'assemblage donné Mnemonics .

Maintenant que c'est l'été, un nouveau projet a commencé avec l'objectif de réécrire l'interprète et l'assembleur de WhitSpace 0.3, avec des développements supplémentaires à venir après. Comme il y a tellement de temps supplémentaire qu'auparavant pour travailler sur sa conception, vous êtes présenté ici avec un aperçu fournissant un ensemble révisé de mnémoniques pour la langue d'assemblage. Cet article est marqué comme un wiki pour leur discussion. P>

Avez-vous déjà eu une expérience avec les langues de montage dans le passé? Y avait-il des instructions que vous pensiez avoir été renommée quelque chose de différent? Vous êtes-vous trouvé pensé en dehors de la boîte et avec un paradigme différent que dans lequel les mnémoniques ont été nommés? Si vous pouvez répondre oui à l'une de ces questions, vous êtes le bienvenu ici. Les réponses subjectives sont appréciées! P>


manipulation de pile (IMP: [espace]) strong> p>

La manipulation de la pile est l'une des opérations les plus courantes, d'où le essoufflement de l'impact [espace]. Il y a quatre instructions de pile. P> xxx pré>


arithmétique (IMP: [onglet] [espace]) strong> p>

arithmétique Les commandes fonctionnent sur les deux premiers éléments de la pile et remplacez-les avec le résultat de l'opération. Le premier élément poussé est considéré comme laissé à gauche de l'opérateur. P>

print chr    Output the character at the top of the stack
print int    Output the number at the top of the stack
input chr    Read a character and place it in the location given by the top of the stack
input int    Read a number and place it in the location given by the top of the stack


1 commentaires

Sainte Crap, un assembleur d'espaces? Je crois que ton geek-o-mètre vient d'aller jusqu'à onze!


3 Réponses :


4
votes

Je pense que le premier changement que j'aurais proposé est de changer de maintien et de tomber pour pousser et faire sauter respectivement.

Alors peut-être que je renommerais Copier à DUP (je pense que c'est le nom le plus courant de cette opération dans les langages orientés de la pile).

Je suis un peu perplexe Pourquoi souvent, vous avez des explications courtes sur un mot qui sont différents au mnémonique. Par exemple, Mnemonic est enregistré, l'explication est stockée. Mnemonic est chargé, l'explication est récupération. Incidemment, ce sont les deux mnémoniques qui ne m'ont pas suffisamment expliquée. Enregistrer quoi où? Chargez à quoi? ( éditer la question a ensuite été modifiée pour que ces significations soient claires)

Merci pour le post intéressant.


1 commentaires

Les explications proviennent du tutoriel trouvé ici: Compsoc.dur.ac.uk/whitSpace/Tutorial .php



1
votes

Je ne suis pas sûr de comprendre votre question complètement, alors si je suis hors de base, pardonnez-moi.

En plus de votre pile, j'ajouterais probablement un "registre d'état" contenant une variété de drapeaux différents (comme le transport, le débordement et la zéro) définis par les opérateurs arithmatic.

J'ajouterais alors "si" formes qui testent ces drapeaux.

J'ajouterais des instructions de la décalage de bits et de la rotation (à gauche et droite), ainsi que et / ou / xor / non des opérations qui fonctionnent sur des bits.

Vous voudrez probablement avoir une sorte d'accès à la mémoire, à moins que vous n'ayez pas intéressé les instructions d'E / S de traiter la mémoire comme un flux de valeurs pour cette bonne sensation de la machine de la machine de Turing Turing.


1 commentaires

Étant donné que je n'ai pas écrit la langue et l'intention de réécrire actuellement l'interprète pour la version 0.3 de la langue, des options de modification de sa modification sont limitées. Si tout se passe bien, je peux prendre la liberté de faire de petites modifications à l'ensemble d'instructions et de se concentrer principalement sur le code d'assemblage pour la version 0.4 de la langue. Continuer sur, la version 0.5 se concentrerait probablement sur l'instruction et impliquerait une refonte beaucoup plus grande d'assemblée d'espaces. De plus, déplacer la langue de l'utilisation de trois caractères blanchisseurs aux six caractères blancheurs est un faible objectif supplémentaire.



3
votes
  • push #n, pour préciser que n est un immédiat.
  • "Swap" est parfois "excrorcé" ou "EXCH" Je pense.
  • "SAVE" est généralement "ST" (Store)
  • "charge" est généralement "ld"
  • "appel" pourrait également être "JSR" ou "BL".
  • "goto" est généralement "JMP" ou "BRA"
  • "si = 0" est généralement "BEQ"
  • "si <0" est généralement "BLT"
  • "retour" est généralement "RET" ou "BLR"
  • "Sortie" est généralement "HALT" / "HLT" dans le contexte d'une CPU.
  • "Imprimer Chr Chr" et "Imprimer int" pourrait être "print.c" et "imprimer.i". Il existe de nombreuses façons de spécifier des variantes d'instructions, mais cela n'est généralement pas dans les opérandes.

    EDIT:

    Si cela ne vous dérange pas de confluer des opérations et des modes d'adresses, à l'aide de la syntaxe CISCY,

    • "PUSH (SP)" au lieu de "Copier"
    • "push n (SP)" au lieu de "copier n" (MODULO multipliant par la taille du mot)
    • "push * (SP)" au lieu de "charger" (sauf qu'il fait une pop avant de pousser les valeurs chargées)
    • "POP * 1 (SP)" au lieu de "pousser" (sauf qu'il saute réellement deux fois)

      D'autre part, le code basé sur la pile traite généralement la poussée et la pop comme implicite. Dans ce cas, "Imm n" (immédiat) au lieu de "pousser". Ensuite, toutes les opérations de pile sont des opérations purement empilées, ce qui est agréable et cohérent.

      Je ne suis pas sûr de savoir comment j'écrirais "DROP N" - la description permet de "goutte 1" n'est pas équivalente à "Drop" qui semble étrange.


4 commentaires

Merci! L'instruction HOLD était une poussée originale et l'instruction de chute était à l'origine. POP était considéré, mais ni pousser ni ne décrit très bien l'opération (même s'ils sont standard). Votre suggestion sur le changement de sortie sur HALT a du sens. "Imprimer CHR" est une instruction: elle n'a pas d'opérande. Peut-être que étudier 4D me reçoivent. Ils permettent aux espaces dans leurs instructions, étrangement. :)


Cela dépend du paradigme que vous utilisez. Le X87 a "FSTP" qui signifie "Store à point flottant et POP", c'est-à-dire que le stockage est orthogonal de sauter (beaucoup d'instructions x87 ont des variantes "et pop"). Ajout d'une édition ...


De Wapedia: in Unix Halt est la commande pour arrêter l'ordinateur. Dans la langue de montage X86, HLT est une instruction qui arrête la CPU jusqu'à ce que la prochaine interruption externe soit tirée. qui peut être utile plus tard lorsque WhitSpace est développé dans d'autres versions. La programmation d'un système d'interruption dans la langue serait une excellente expérience d'apprentissage.


Sur certains systèmes, il y a une distinction entre {{halt}} et {{poweroff}}.