the typical opcode is

	ADDL	AX,BX

the book shows ADD; the assembler
demands ADDB, ADDW or ADDL to specify
byte, word or doubleword (long).

in byte mode, registers such as AX
are equivalent to AL. registers like
DX are illegal. you must used AH, etc
to get the high bytes.

long mode is assumed. word mode is
escaped with 0x66. in both word mode
and long mode, use AX, BX etc. the
names EAX, EBX are not known.

far addressing is not recognized.
16-bit addressing is not recognized.

addressing modes:

	AX
	(AX)
	(AX)(BX*4)
	10(AX)
	10(AX)(BX*4)

names can be used with/without indexing.

	param+10(FP)
	param+10(FP)(AX*2)
	auto-8(SP)(AX*2)
	extern+5(SB)(AX*2)
	static<>+9(SB)(AX*2)

double indexing of externals are theoretically
possible, but not allowed, eg:

	extern+5(SB)(AX)(BX*4)

some special instructions:

	MOVL	AX, GDTR	/* lgtd */
	MOVL	AX, IDTR	/* lidt */
	MOVL	(AX), SP:SS	/* load full pointer */
	MOVW	AX, LDTR	/* lldt */
	MOVW	AX, MSW		/* lmsw */
	MOVW	AX, TASK	/* ltr */
	MOVW	DS, AX		/* move data, segments */
	MOVL	CR0, AX		/* move to/from special */
	MOVL	GDTR, AX	/* sgdt */
	MOVL	IDTR, AX	/* sidt */
	MOVW	LDTR, AX	/* sldt */
	SHLL	$16, 10(SP):AX	/* double shift */
	MOVW	MSW, AX		/* smsw */
	MOVW	TASK, AX	/* str */

other notes:

SETCC:
	only name for the condition codes:
	CC, CS, EQ, GE, GT, HI, LE, LS, LT,
	MI, NE, OC, OS, PC, PL, PS
	the JCC codes have most reasonable
	synonyms
JMP/CALL:
	non-relative addresses have '*' added to
	the syntax.
IMUL
	the special operands are not recognized.
	the syntax is the same as for MUL, DIV, IDIV.
LOOP
	only LOOP, LOOPEQ, LOOPNE
REP
	only REP, REPN. the opcodes are not prefixes,
	but standalone opcodes preceding the strings.
