ASM:		MOV DI, OFFSET ELEMENT
		CALL TRIM
		MOV SI, OFFSET ELEMENT
		XOR AX, AX
		MOV [OUTPUT], AL
		MOV [STK], SP
		MOV DI, OFFSET FLAGS
		MOV CX, 15
		CLD
	REPZ	STOSB
		LODSB
		OR AL, AL
		JZ ASM0
		MOV BP, SI
ASML:		OR BYTE PTR [SI], 0
		JZ ASM0
		MOV DI, OFFSET I8086
		CALL SL
		JNC ISGOOD
		MOV AH, 17H
ISGOOD:		MOV [OPCODE], AL
		OR BYTE PTR [FLAGS], 20H
		XOR BX, BX
		XCHG BL, AH
		SHL BX, 1
		LEA BX, [BX+IHDL]
		LODSB
		ADD SI, AX
		CALL [BX]
		LODSB
		OR AL, AL
		JNZ ASMX
		OR BYTE PTR [FLAGS], 0
		JNZ WRITE
		OR BYTE PTR [OUTPUT], 0
		JNZ WRD
ASM0:		CLC
		RET
ASMX:		MOV AL, 9
		JMP FAIL
WRITE:		CLD
		MOV DI, OFFSET OUTPUT+1
		MOV SI, OFFSET PREFIX
		MOV DL, [FLAGS]
		LODSB
		TEST DL, 80H
		JZ NOPREF
		STOSB
NOPREF:		LODSB
		TEST DL, 40H
		JZ NOSPR
		STOSB
NOSPR:		LODSB
		TEST DL, 20H
		JZ NOOPC
		STOSB
NOOPC:		LODSB
		TEST DL, 10H
		JZ NOMOD
		STOSB
NOMOD:		LODSW
		TEST DL, 8
		JZ WNDISP
		TEST DL, 4
		JZ WBDISP
		STOSB
		MOV AL, AH
WBDISP:		STOSB
WNDISP:		LODSW
		TEST DL, 2
		JZ WNIMM
		TEST DL, 1
		JZ WBIMM
		STOSB
		MOV AL, AH
WBIMM:		STOSB
WNIMM:		MOV AX, DI
		SUB AX, OFFSET OUTPUT+1
		MOV [OUTPUT], AL
WRD:		XOR AH, AH
		MOV AL, [OUTPUT]
		ADD [PC], AX
		CLC
		RET
