B.1. Key to Operand Specifications
==================================
The instruction descriptions in this appendix specify their operands
using the following notation:
* Registers: `reg8' denotes an 8-bit general purpose register,
`reg16' denotes a 16-bit general purpose register, and `reg32' a
32-bit one. `fpureg' denotes one of the eight FPU stack registers,
`mmxreg' denotes one of the eight 64-bit MMX registers, and
`segreg' denotes a segment register. In addition, some registers
(such as `AL', `DX' or `ECX') may be specified explicitly.
* Immediate operands: `imm' denotes a generic immediate operand.
`imm8', `imm16' and `imm32' are used when the operand is intended
to be a specific size. For some of these instructions, NASM needs
an explicit specifier: for example, `ADD ESP,16' could be
interpreted as either `ADD r/m32,imm32' or `ADD r/m32,imm8'. NASM
chooses the former by default, and so you must specify `ADD
ESP,BYTE 16' for the latter.
* Memory references: `mem' denotes a generic memory reference;
`mem8', `mem16', `mem32', `mem64' and `mem80' are used when the
operand needs to be a specific size. Again, a specifier is needed
in some cases: `DEC [address]' is ambiguous and will be rejected
by NASM. You must specify `DEC BYTE [address]', `DEC WORD
[address]' or `DEC DWORD [address]' instead.
* Restricted memory references: one form of the `MOV' instruction
allows a memory address to be specified _without_ allowing the
normal range of register combinations and effective address
processing. This is denoted by `memoffs8', `memoffs16' and
`memoffs32'.
* Register or memory choices: many instructions can accept either a
register _or_ a memory reference as an operand. `r/m8' is a
shorthand for `reg8/mem8'; similarly `r/m16' and `r/m32'. `r/m64'
is MMX-related, and is a shorthand for `mmxreg/mem64'.