Addressing modes subtly (sometimes not-so-subtly) alter the behaviour of instructions.  A somewhat brief description of their general properties is given here.  Specifics will be left to the instruction set section.

An octothorpe (#) is used to indicate an operand with an Immediate Address Mode.  Immediate mode data is contained in the current instruction's field.  If the A-mode is immediate, the data is in the A-field.  If the B-mode is immediate, the data is in the B-field.

If no mode indicator is present (86: or the US dollar sign '$' is present), Direct Address Mode is used.  Direct addresses refer to instructions relative to the current instruction.  Address 0 refers to the current instruction.  Direct address -1 refers to the (physically) previous instruction.  Direct address +1 refers to the (physically) next instruction.

The commercial-at (@) is used to indicate Indirect Address Mode.  In indirect addressing, the indirect address points to an instruction as in direct addressing, except the target is not the instruction to which the indirect address points but rather the instruction pointed to by the B-field of the instruct pointed to by the indirect address.

Example:
x-2     DAT  #0,  #0   ; Target instruction.
x-1     DAT  #0, #-1   ; Pointer instruction.
x       MOV   0, @-1   ; Copies this instruction to location x-2.

The less-than (<) is used to indicate (86: Auto-, 88: Pre-) Decrement Indirect Address Mode.  Its behaviour is just like that of Indirect Address Mode, except the pointer is decremented before use.

Example:
x-2     DAT  #0,  #0   ; Target instruction
x-1     DAT  #0,  #0   ; Pointer instruction.  Compare to @ example.

x       MOV   0, <-1   ; Copies this instruction to location x-2.

Commentary: Although Decrement Indirect addressing appears to be a simple extension of Indirect addressing, it is really very tricky at times - especially when combined with DJN.  There are sematic differences between the '86 and '88 standards, thus the change in name from Auto-Decrement to Pre-Decrement.  These differences are discussed below.  This discussion is non-essential for the average Redcode programmer.  I suggesting skipping to the next section for the weak-stomached.

86: Durham: Instructions are fetched from memory into an instruction register.  Each operand is evaluated, storing a location (into an address register) and an instruction (into a value register) for each operand.  After the operands have been evaluated, the instruction is executed.

Operand Evaluation: If the mode is immediate, the address register is loaded with 0 (the current instruction's address) and the value register is loaded with the current instruction.  If the mode is direct, the address register is loaded with the field value and the value register is loaded with the instruction pointed to by the address register.  If the mode is indirect, the address register is loaded with the sum of the field value and the B-field value of the instruction pointed to by the field value and the value register is loaded with the instruction pointed to by the address register.  If the mode is auto-decrement, the address register is loaded with a value one less than the sum of the field value and the B-field value of the instruction pointed to by the field value and the value register is loaded with the instruction pointed to by the address register.  AFTER the operands have been evaluated (but before instruction execution), if either mode was auto-decrement, the appropriate memory location is decremented.  If both modes were auto-decrement and both fields pointed to the same pointer, that memory location is decremented twice.  Note that this instruction in memory then points to a different instruction than either operand and also differs from any copies of it in registers.

86: Other: As above, except there are no registers.  Everything is done in memory.

Commentary: ICWS'86 clearly states the use of an instruction register, but the other operand address and value registers are only implied.  Ambiguities and lack of strong statements delineating what takes place in memory and what takes place in registers condemned ICWS'86 to eternal confusion and gave birth to ICWS'88.
88: As above except everything is done in memory and Pre-Decrement Indirect replaces Auto-Decrement Indirect.  Pre-Decrement Indirect decrements memory as it is evaluating the operands rather than after.  It evaluates operand A before evaluating operand B.