A notation for the convenient representation of machine-code programs in human-readable terms. An assembly language allows the programmer to use alphabetic operation codes with mnemonic significance, to use personally chosen symbolic names for memory registers, and to specify addressing schemes (e.g. indexing, indirection) in a convenient way. It also allows the use of various number bases (e.g. decimal, hexadecimal) for numerical constants, and allows the user to attach labels to lines of the program so that these lines can be referenced in a symbolic manner from other parts of a program (usually as the destination of a control transfer or jump).