REG : AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
SREG : DS, ES, SS, and only as second operand: CS.
memory : [BX], [BX+SI+7], variable, etc...
immediate: 5, -24, 3Fh, 10001101b, etc...
* When two operands are required for an instruction, they are separated by a
comma. For example:
* When there are two operands, both operands must have the same size (except
shift and rotate instructions). For example:
m1 DB ?
m2 DW ?
* Some instructions allow several operand combinations. For example:
* Some examples contain macros, so it is advisable to use Shift + F8 hot key
to "Step Over" (to make macro code execute at maximum speed set step delay
to zero), otherwise emulator will step through each instruction of a macro.
Here is an example that uses PRINTN macro:
MOV AL, 1
MOV BL, 2
PRINTN 'Hello World!' ; macro.
MOV CL, 3
PRINTN 'Welcome!' ; macro.
These marks are used to show the state of the flags:
1 - instruction sets this flag to 1.
0 - instruction sets this flag to 0.
r - flag value depends on result of the instruction.
? - flag value is undefined (may be 1 or 0).
Some instructions generate exactly the same machine code, so disassembler may
have a problem decoding to your original code. This is especially true for
Conditional Jump instructions.