There are two things about MARS which make Redcode different from any other assembly language.  The first of these is that there are no absolute addresses in MARS.  The second is that memory is circular.

Because there are no absolute addresses, all Redcode is written using relative addressing.  In relative addressing, all addresses are interpreted as offsets from the currently executing instruction.  Address 0 is the currently executing instruction.  Address -1 was the previously executed instruction (assuming no jumps or branches).  Address +1 is the next instruction to execute (again assuming no jumps or branches).

Because memory is circular, each instruction has an infinite number of addresses.  Assuming a memory size of M, the current instruction has the addresses { ..., -2M, -M, 0, M, 2M, ... }.  The previous instruction is { ..., -1-2M, -1-M, -1, M-1, 2M-1, ... }.  The next instruction is { ..., 1-2M, 1-M, 1, M+1, 2M+1, ... }.

Commentary: MARS systems have historically been made to operate on object code which takes advantage of this circularity by insisting that fields be normalized to positive integers between 0 and M-1, inclusive.  Since memory size is often not known at the time of assembly, a loader in the MARS system (which does know the memory size) takes care of field normalization in addition to its normal operations of code placement and task pointer initialization.

Commentary: Redcode programmers often want to know what the memory size of the MARS is ahead of time.  This is not always possible.  Since normalized fields can only represent integers between 0 and M-1 inclusive, we can not represent M in a normalized field.  The next best thing?  M-1.  But how can we write M-1 when we do not know the memory size?  Recall from above that -1 is equivalent to M-1.  Final word of caution: -1/2 is assembled as 0 (not as M/2) since the expression is evaluated within the assembler as -0.5 and then truncated.

86: Only two assembled-Redcode programs (warriors) are loaded into MARS memory (core).
88: Core is initialized to (filled with) DAT 0, 0 before loading any warriors.  Any number of warriors may be loaded into core.

Commentary: Tournaments almost always pit warrior versus warrior with only two warriors in core.

MARS is a multi-tasking system.  Warriors start as just one task, but can "split" off additional tasks.  When all of a warriors tasks have been killed, the warrior is declared dead.  When there is a sole warrior still executing in core, that warrior is declared the winner.

86: Tasks are limited to a maximum of 64 for each warrior.
88: The task limit is not set by the standard.