Propeller Manual

Table Of Contents
3: Assembly Language Reference
add X, #25 'Add 25 to X
add X, Y 'Add Y to X
X long 50
Y long 10
The first instruction adds the literal value 25 to the value stored in the register X. The second
instruction adds the value stored in register
Y to the value stored in the register X. In both
cases, the result of the addition is stored back into register
X.
The last two lines define data symbols
X and Y as long values 50 and 10, respectively. Since
launching assembly code into the cog caused this data to enter Cog RAM right after the
instructions,
X naturally is a symbol that points to the register containing 50, and Y is a symbol
that points to the register containing 10.
Thus, the result of the first
ADD instruction is 75 (i.e.: X + 25 50 + 25 = 75) and that value,
75, is stored back in the
X register. Similarly, the result of the second ADD instruction is 85
(i.e.:
X + Y 75 + 10 = 85) and so X is set to 85.
Don't Forget the Literal Indicator '#'
Make sure to enter the literal indicator,
#, when a literal value (a.k.a. immediate value) is
intended. Modifying the first line of the above example by omitting the
# character
(ex:
ADD X, 25) causes the value in register 25 to be added to X instead of the value 25 being
added to
X.
Another possible mistake is to omit the
# on branching instructions like JMP and DJNZ. If the
intended branch destination is a label named
MyRoutine, a JMP instruction should normally
look like
JMP #MyRoutine rather than JMP MyRoutine. The latter causes the value stored in the
MyRoutine register to be used as the address to jump to; that's handy for indirect jumping but
it is usually not the intention of the developer.
Literals Must Fit in 9 Bits
The source operand is only 9 bits wide; it can hold a value from 0 to 511 ($000 to $1FF).
Keep this in mind when specifying literal values. If a value is too big to fit in 9 bits, it must
be stored in a register and accessed via the register's address. For example:
add X, BigValue 'Add BigValue to X
X long 50
BigValue long 1024
Propeller Manual v1.1 · Page 241