9.54.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.

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:


Immediate 3 Bit Wide


Immediate 4 Bit Wide


Immediate 8 Bit Wide


Monadic Addressing


Dyadic Addressing

reg, reg

Triadic Addressing

reg, reg, reg

Relative Addressing 9 Bit Wide


Relative Addressing 10 Bit Wide


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)
stw R2, (R1, #0)