summaryrefslogtreecommitdiff
path: root/programs/sub-suite/subasm-syntax
diff options
context:
space:
mode:
Diffstat (limited to 'programs/sub-suite/subasm-syntax')
-rw-r--r--programs/sub-suite/subasm-syntax56
1 files changed, 56 insertions, 0 deletions
diff --git a/programs/sub-suite/subasm-syntax b/programs/sub-suite/subasm-syntax
new file mode 100644
index 0000000..1337914
--- /dev/null
+++ b/programs/sub-suite/subasm-syntax
@@ -0,0 +1,56 @@
+/* Assembly language syntax for SuBAsm. */
+
+/* Comments begin with "/*", and end with "*/".
+ * Directives begin with a `\`.
+ */
+
+/* mnemonic is the instruction name/mnemonic.
+ * expr is an expression.
+ * Indirect Indexed means applying the index after the indirection.
+ * Indexed Indirect means applying the index before the indirection.
+ */
+
+Expression syntax:
+ /* TODO */
+Instruction syntax:
+ Base ISA, and Base Extension:
+ Implied:
+ <mnemonic>
+ B register:
+ <mnemonic> b
+ Absolute/Zero Matrix:
+ /* [, <x|y>] means Indexed with x, or y. */
+ <mnemonic> <expr>[, <x|y>]
+ Immediate Data:
+ <mnemonic> #<expr>
+ Absolute/Zero Matrix Indirect:
+ /* Indexing with x means Indexed Indirect.
+ * Indexing with y means Indirect Indexed.
+ */
+ <mnemonic> (<expr>[, x])[, y]
+ E Indirect:
+ <mnemonic> (e)
+ Orthogonal Extension:
+ <mnemonic> <operand>[, operand]
+ Operand syntax:
+ <\(
+ /* The operand starts with a register.
+ * If the statment is inside brackets, then
+ * it's a register indirect mode.
+ */
+ [(]reg[+<reg>][\(+|-\)<expr>][)]
+ /* The operand starts with an expression.
+ * If the statment is inside brackets, then
+ * it's an indirect mode.
+ */
+ |[(]expr
+ /* Is the operand using Indirect, or Indirect Indexed? */
+ \if (ind || ind_indexed) {
+ [)]
+ \}
+ [\(+|-\)<reg[+<reg>]>]
+ /* Is the operand using Indexed Indirect? */
+ \if (indexed_ind) {
+ [)]
+ \}
+ \)>