The As10k1's assembly syntax was originally intended to be similar to MC68K assembly. It has since evolved and now has a unique syntax.
Assembly lines generally have four fields separated by spaces or tabs:
With this assembler, each line can have a maximum of 256 characters and each symbol can be a maximum of 11 characters. Symbols ARE case sensitive, opcodes ARE NOT.
A symbols is a words which placed at the beginning of a line (it must start at column 1) and is used by assembly directive. Symbols may be used to reference a register, an assembly-time equate, to reference a position in the program (the skip instruction), or just as a label to indicate to a reader where they are in a program (e.g. "start"). The use of a symbol is covered in greater detail in the sections describing assembly directives.
The first character in a symbol must be an alpha character* (a-z,A-Z). The remaining characters may be alphanumeric (a-z,A-Z,0-9) or an underscore (_). Symbols cannot exceed a length of 32 characters.
*An exception to this rule occurs when symbols are used for the skip command, in which case the symbol must start with a period.
All instructions require 4 operands, they have the format
Here is a summary of the 16 opcodes. 
|Opcode Number||Opcode Mnemonic||Instruction||comment|
|0x0||MACS||R = A + (X * Y >> 31)||saturation|
|0x1||MACS1||R = A + (-X * Y >> 31)||saturation|
|0x2||MACW||R = A + (X * Y >> 31)||wraparound|
|0x3||MACW1||R = A + (-X * Y >> 31)||wraparound|
|0x4||MACINTS||R = A + X * Y||saturation|
|0x5||MACINTW||R = A + X * Y||wraparound (31-bit)|
|0x6||ACC3||R = A + X + Y||saturation|
|0x7||MACMV||R = A, acc += X * Y||67 bit accum, you can grab MS 32 bits of LS 32 bits|
|0x8||ANDXOR||R = (A & X) ^ Y|| |
|0x9||TSTNEG||R = (A >= Y) ? X : ~X|| |
|0xa||LIMIT||R = (A >= Y) ? X : Y|| |
|0xb||LIMIT1||R = (A < Y) ? X : Y|| |
|0xe||INTERP||R = A + (X * (Y - A) >> 31)||; saturation|
Operands can be specified as either a symbol or a value. hex values are prefixed by $, octal by @, and binary by %.
123 decimal value
$123 hex value
@123 octal value
%01101 binary value
The operands for emu10k1 instructions are always addresses of registers, there are no instruction which take immediate values.
Some directives have there own special operand forms
A semicolon ";" indicates to the assembler that everything afterwards is a comment.
Anything after a completed instruction (i.e. one that has four operands) will also be ignored. However, to be on the safe side, I recommend aways using a ";" to make sure that the assembler knows to ignore what follows.
Here's an example of an instruction:
foo macs one,two,three,four ;comment
"foo" is a symbol (in this case it does nothing), "macs" is our instruction, and "one,two,three,four" is our operand, ";comment" is ignored.