/* 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) { [)] \} \)>