"Name" = 'x86 OpCode Encodings' "Author" = 'Leith Ketchell' "Version" = '0.9a' "About" = 'The whole lot from 8086 to the present day, inc. undocumented opcodes' "Start Symbol" = ! ------------------------------------------------- Sets {WS} = {Whitespace} - {CR} - {LF} Whitespace = {WS}+ {String Chars} = {Printable} + {HT} - ["] ! ------------------------------------------------- Terminals ! The following defines the Whitespace terminal using the {WS} ! set - which excludes the carriage return and line feed ! characters NewLine = {CR} + {LF} !| {CR} | {LF} Identifier = {Letter}{AlphaNumeric}* Int = {Digit}{Digit}* {Hex Digit} = {Digit} + [abcdef] + [ABCDEF] Hex = {Hex Digit} {Hex Digit} ! ------------------------------------------------- Rules ! The following rule defines a series of newline tokens. ! Use this rule rather than the newline terminal.      ::= NewLine          !One or more   | NewLine ::= NewLine       !Zero or more           | !Empty ! removes blank lines before first statement ::= !ARPL r/m16,reg16 ; 63 /r [286,PRIV] ::= | ::= ':' ';' o16 '[' ']' | ':' ';' o32 '[' ']' | ':' ';' '[' ']' | ';' o16 '[' ']' | ';' o32 '[' ']' | ';' '[' ']' | FAR ';' o16 '[' ']' | FAR ';' o32 '[' ']' | FAR ';' '[' ']' | SHORT ';' o16 '[' ']' | SHORT ';' o32 '[' ']' | SHORT ';' '[' ']' | NEAR ';' o16 '[' ']' | NEAR ';' o32 '[' ']' | NEAR ';' '[' ']' | TO ';' o16 '[' ']' | TO ';' o32 '[' ']' | TO ';' '[' ']' ::= ',' | ::= 8086 | 186 | 286 | 386 | 486 | CYRIX | PENT | P6| MMX | FPU | PRIV | UNDOC ::= | ::= Hex |'/'Int | 'ib' | 'iw' | 'id' | '/r' | '+r' | '+cc' | '/rd' | 'rw' | 'rb' | 'a16' | 'a32' | 'ow/od' ::= ',' | ',' Int | | ::= reg32 | imm32 | reg16 | imm16 | reg8 | imm8 | segreg | mmxreg | fpureg | ST0 | r'/'m64 | r'/'m32 | r'/'m16 | r'/'m8 | AL | AX | EAX | DL | DX | EDX | CL | CX | ECX | CS | DS | ES | FS | GS | SS | mem | mem16 | mem32 | mem64 | mem80 | imm | memoffs8 | memoffs16 | memoffs32 | memoffs64 | 'CR0/2/3/4' | 'DR0/1/2/3/6/7' | 'TR3/4/5/6/7' ::= Identifier