Operand types
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...
Notes:
* When two operands are required for an instruction, they are separated by a
comma. For example:
REG, memory
* When there are two operands, both operands must have the same size (except
shift and rotate instructions). For example:
AL, DL
DX, AX
m1 DB ?
AL, m1
m2 DW ?
AX, m2
* Some instructions allow several operand combinations. For example:
memory, immediate
REG, immediate
memory, REG
REG, SREG
* 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:
#make_COM#
include 'emu8086.inc'
ORG 100h
MOV AL, 1
MOV BL, 2
PRINTN 'Hello World!' ; macro.
MOV CL, 3
PRINTN 'Welcome!' ; macro.
RET
Flags
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).
Caveats
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.