#### 9.53.2 Syntax

In XGATE RISC syntax, the instruction name comes first and it may be followed by up to three operands. Operands are separated by commas (‘`,`’). `as` will complain if too many operands are specified for a given instruction. The same will happen if you specified too few operands.

    nop
    ldl  #23
    CMP  R1, R2

The presence of a ‘`;`’ character or a ‘`!`’ character anywhere on a line indicates the start of a comment that extends to the end of that line.

A ‘`*`’ or a ‘`#`’ character at the start of a line also introduces a line comment, but these characters do not work elsewhere on the line. If the first character of the line is a ‘`#`’ then as well as starting a comment, the line could also be logical line number directive (see Comments) or a preprocessor control command (see Preprocessing).

The XGATE assembler does not currently support a line separator character.

The following addressing modes are understood for XGATE:

Inherent

  ‘``’

Immediate 3 Bit Wide

  ‘`#number`’

Immediate 4 Bit Wide

  ‘`#number`’

Immediate 8 Bit Wide

  ‘`#number`’

Monadic Addressing

  ‘`reg`’

Dyadic Addressing

  ‘`reg, reg`’

Triadic Addressing

  ‘`reg, reg, reg`’

Relative Addressing 9 Bit Wide

  ‘`*symbol`’

Relative Addressing 10 Bit Wide

  ‘`*symbol`’

Index Register plus Immediate Offset

  ‘`reg, (reg, #number)`’

Index Register plus Register Offset

  ‘`reg, reg, reg`’

Index Register plus Register Offset with Post-increment

  ‘`reg, reg, reg+`’

Index Register plus Register Offset with Pre-decrement

  ‘`reg, reg, -reg`’

  The register can be either ‘`R0`’, ‘`R1`’, ‘`R2`’, ‘`R3`’, ‘`R4`’, ‘`R5`’, ‘`R6`’ or ‘`R7`’.

Convene macro opcodes to deal with 16-bit values have been added.

Immediate 16 Bit Wide

  ‘`#number`’, or ‘`*symbol`’

  For example:

      ldw R1, #1024
      ldw R3, timer
      ldw R1, (R1, #0)
      COM R1
      stw R2, (R1, #0)