Basic Instruction Set and Assembler Programming (MS-DOS)

While the 8088 (and 80x86 family) provide a large number of machine level instructions and while MS-DOS (and its Windows derivatives) supply an equally larger number of service routines, it is possible to get a feeling for low-level programming with a relatively few instructions and interrupt services. The material found here is not intended to make you into an IBM PC Assembler programmer; that would require at least a full course and some practical experience. However, you should get a basic feel for the structure and methods of low-level programming on the IBM PC.

Intel Assembler Operand Types

These types are used in the list of basic Intel assembler instructions below. Note that although the following includes "labels" as valid "operand types", "labels" are not useable in DEBUG; these references are maintained here only for future use with true "assembler" programs (such as Arrow, MASM, or TASM).

- any general or 8-bit register e.g. CX, DI, AL
- any 8 bit register e.g. BH, DL
- any (16-bit) general register e.g. AX, SI, BP
- any segment register e.g. CS, ES
- a memory reference; possibly a label (not in DEBUG), an index or base register reference, a constant (in certain cases), a combination of the above (with optional segreg) e.g. TOTAL, [BX], TABL[BX], [ES:0080h], NUM+4 (again, note that labels are not available within DEBUG; you can only use register names and/or numbers).
- any general or 8-bit register or memory reference e.g. AH, CX, [DS:SI], COUNT
- a constant expression e.g. 10h, 0, 'A', offset LABELX (not in DEBUG)
label (not in DEBUG)
- the label associated with a statement or data definition e.g. TOTAL, STEP_2