Files
wassembly/design.md

1.7 KiB

Design

Parsing

  • First we tokenize the input (syntax check)
  • Then we interpret the input (semantics check)
  • Then we execute the input

Notation

  • [operation][number type], e.g. divi for divide (div) integer
  • %[register] for addressing registers
  • $[value] for using literals/immediate values
  • ; for end of statement (mandatory)
  • [label]: for labels
  • #[text] for comments: any text is ignored till a newline (\n) is found
  • Elements must be separated by whitespace character
    • Good: add $2 $5 %A;
    • Bad: add $2$5%A;

Examples

Divide register A by 5 and store the result in register A: divi %A $5 %A;

Reserved symbols

The following whitespace characters are used to separate symbols:

  • space ( )
  • tab (\t)
  • return carriage (\r)
  • newline (\n)

The following characters are used as identifiers:

  • dollar ($)
  • percentage (%)
  • colon (:)
  • semicolon (;)
  • hash (#)

All operands are reserved keywords and can therefore NOT be used as labels.

Operands

  • addi add the first to the second argument and store the result in the third argument
  • subi subtract the first from the second argument and store the result in the third argument
  • divi divide the first by the second argument and store the result in the third argument
  • muli multiply the first by the second argument and store the result in the third argument
  • shli shift left the first argument by the number of positions given by the second argument and store the result in the third argument
  • shri shift right the first argument by the number of positions given by the second argument and store the result in the third argument
  • jmp jump to the label given by the first argument