/*************************************************************************** intel_x86.tbl - x86 assembler definition file ------------------- begin : Mon Apr 24 2000 copyright : (C) 2000 by Jan Nikitìnko email : xnikit00@stud.fee.vutbr.cz ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ //Endian(BIG); Endian(LITTLE); NumberBase binbase(2); NumberBase octbase(8); NumberBase decbase(10); NumberBase hexbase(16); OperValue hexnum("0x*", hexbase) { Return $0; }; OperValue binnum("bin(*)", binbase) { Return $0; }; OperValue octnum("oct(*)", octbase) { Return $0; }; OperValue decnum("*", decbase) { Return $0; }; OperValOpt number( binnum, octnum, hexnum, decnum ) { }; InstFormat = { [prefixes] opcode [modRM] [disp] [immd] }; Enum AL { "al" }; Enum AX { "ax" }; Enum r8 { "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh" }; Enum r16 { "ax", "cx", "dx", "bx", "sp", "bp", "si", "di" }; Operand i8("*", number) { SetB(immd, $0); }; Operand i16("*", number) { SetW(immd, $0); }; Enum bxbp { "bx", "bp" }; Enum sidi { "si", "di" }; Enum sidibx { "si", "di", "bx"=3 }; Enum baseregs { "si", "di", "bp", "bx" }; Operand bspbs("[*+*]", bxbp, sidi) { OrB(modRM, $1|($0<<1)); }; Operand base("[*]", baseregs) { OrB(modRM, 4|$0); }; Operand basenobp("[*]", sidibx) { OrB(modRM, 4|$0); }; Operand based16("*", number) { SetW(disp, $0); }; Operand based16only("[*]", based16) { OrB(modRM, 4|2); }; OperOption ea00(bspbs, basenobp, based16only) { }; Operand based8("*",number) { SetB(disp, $0); }; Operand bspbspd8("*+*", bspbs, based8) { }; Operand basepd8("*+*", base, based8) { }; OperOption ea01(bspbspd8, basepd8) { OrB(modRM, 1<<6); }; Operand bspbspd16("*+*", bspbs, based16) { }; Operand basepd16("*+*", base, based16) { }; OperOption ea10(bspbspd16, basepd16) { OrB(modRM, 2<<6); }; Operand ea11_r8("*", r8) { OrB(modRM, $0 | (3<<6)); }; Operand ea11_r16("*", r16) { OrB(modRM, $0 | (3<<6)); }; OperOption rm8(ea00, ea01, ea10, ea11_r8) { }; OperOption rm16(ea00, ea01, ea10, ea11_r16) { }; Instructions { ("AAA"): { SetB(opcode, 0x37); } ("AAS"): { SetB(opcode, 0x3F); } ("AAD"): { SetW(opcode, 0x0aD5); } ("AAM"): { SetW(opcode, 0x0aD4); } ("AAD *", i8): { SetB(opcode, 0xD5); } ("AAM *", i8): { SetB(opcode, 0xD4); } ("ADC *,*", AL,i8): { SetB(opcode, 0x14); } ("ADC *,*", AX,i16): { SetB(opcode, 0x15); } ("ADC *,*", r8,rm8): { SetB(opcode, 0x12); OrB(modRM, $0<<3); } ("ADC *,*", r16,rm16): { SetB(opcode, 0x13); OrB(modRM, $0<<3); } ("ADC *,*", rm8,r8): { SetB(opcode, 0x10); OrB(modRM, $1<<3); } ("ADC *,*", rm16,r16): { SetB(opcode, 0x11); OrB(modRM, $1<<3); } ("ADC *,*", rm8,i8): { SetB(opcode, 0x80); OrB(modRM, 2<<3); } ("ADC *,*", rm16,i8): { SetB(opcode, 0x83); OrB(modRM, 2<<3); } ("ADC *,*", rm16,i16): { SetB(opcode, 0x81); OrB(modRM, 2<<3); } }; /* //*********** these instructions are not fully defined yet *************** //*********** so they are commented out *************** ("ADD *,*", AL,i8): { SetB(opcode, 0x04); } ("ADD *,*", AX,i16): { SetB(opcode, 0x05); } ("ADD *,*", r8,rm8): { SetB(opcode, 0x02); /r } ("ADD *,*", r16,rm16): { SetB(opcode, 0x03); /r } ("ADD *,*", rm8,r8): { SetB(opcode, 0x00); /r } ("ADD *,*", rm16,r16): { SetB(opcode, 0x01); /r } ("ADD *,*", rm8,i8): { SetB(opcode, 0x80); /0 ib } ("ADD *,*", rm16,i8): { SetB(opcode, 0x83); /0 ib } ("ADD *,*", rm16,i16): { SetB(opcode, 0x81); /0 iw } ("AND *,*", AL,i8): { SetB(opcode, 0x24); ib } ("AND *,*", AX,i16): { SetB(opcode, 0x25); iw } ("AND *,*", r8,rm8): { SetB(opcode, 0x22); /r } ("AND *,*", r16,rm16): { SetB(opcode, 0x23); /r } ("AND *,*", rm8,r8): { SetB(opcode, 0x20); /r } ("AND *,*", rm16,r16): { SetB(opcode, 0x21); /r } ("AND *,*", rm8,i8): { SetB(opcode, 0x80); /4 ib } ("AND *,*", rm16,i8): { SetB(opcode, 0x83); /4 ib } ("AND *,*", rm16,i16): { SetB(opcode, 0x81); /4 iw } ("BOUND *,*", r16,m16&16): { SetB(opcode, 0x62); /r } ("CALL *", rel16): { SetB(opcode, 0xE8); cw } //³ CALL FAR ptr16:16 ³ 9A cd ³ ("CALL *", rm16): { SetB(opcode, 0xFF); /2 } //³ CALL FAR m16:16 ³ FF /3 ³ ("CBW"): { SetB(opcode, 0x98); } ("CLC"): { SetB(opcode, 0xF8); } ("CLD"): { SetB(opcode, 0xFC); } ("CLI"): { SetB(opcode, 0xFA); } ("CMC"): { SetB(opcode, 0xF5); } ("CMP *,*", AL,i8): { SetB(opcode, 0x3C); ib } ("CMP *,*", AX,i16): { SetB(opcode, 0x3D); iw } ("CMP *,*", r8,rm8): { SetB(opcode, 0x3A); /r } ("CMP *,*", r16,rm16): { SetB(opcode, 0x3B); /r } ("CMP *,*", rm8,r8): { SetB(opcode, 0x38); /r } ("CMP *,*", rm16,r16): { SetB(opcode, 0x39); /r } ("CMP *,*", rm8,i8): { SetB(opcode, 0x80); /7 ib } ("CMP *,*", rm16,i8): { SetB(opcode, 0x83); /7 ib } ("CMP *,*", rm16,i16): { SetB(opcode, 0x81); /7 iw } ("CMPSB"): { SetB(opcode, 0xA6); } ("CMPSW"): { SetB(opcode, 0xA7); } ("CWD"): { SetB(opcode, 0x99); } ("DAA"): { SetB(opcode, 0x27); } ("DAS"): { SetB(opcode, 0x2F); } ("DEC *", r16): { SetB(opcode, 0x48+rw); } ("DEC *", rm8): { SetB(opcode, 0xFE); /1 } ("DEC *", rm16): { SetB(opcode, 0xFF); /1 } ("DIV *", rm8): { SetB(opcode, 0xF6); /6 } ("DIV *", rm16): { SetB(opcode, 0xF7); /6 } ("ENTER *,*", i16,i8): { SetB(opcode, 0xC8); iw ib } ("HLT"): { SetB(opcode, 0xF4); } ("IDIV *", rm8): { SetB(opcode, 0xF6); /7 } ("IDIV *", rm16): { SetB(opcode, 0xF7); /7 } ("IMUL *", rm8): { SetB(opcode, 0xF6); /5 } ("IMUL *", rm16): { SetB(opcode, 0xF7); /5 } ("IMUL *,*", r16,rm16,i16): { SetB(opcode, 0x69); iw } ("IMUL *,*", r16,rm16,i8): { SetB(opcode, 0x6B); ib } ("IN *,*", AL,DX): { SetB(opcode, 0xEC); } ("IN *,*", AX,DX): { SetB(opcode, 0xED); } ("IN *,*", AL,i8): { SetB(opcode, 0xE4); ib } ("IN *,*", AX,i8): { SetB(opcode, 0xE5); ib } ("INC *", r16): { SetB(opcode, 0x40+rw); } ("INC *", rm8): { SetB(opcode, 0xFE); /0 } ("INC *", rm16): { SetB(opcode, 0xFF); /0 } ("INSB"): { SetB(opcode, 0x6C); } ("INSW"): { SetB(opcode, 0x6D); } //³ INT 3 (Breakpoint) ³ CC ³ ("INT *", i8): { SetB(opcode, 0xCD); ib } ("INTO"): { SetB(opcode, 0xCE); } ("IRET"): { SetB(opcode, 0xCF); } ("JA *", rel8): { SetB(opcode, 0x77); cb } ("JAE *", rel8): { SetB(opcode, 0x73); cb } ("JB *", rel8): { SetB(opcode, 0x72); cb } ("JBE *", rel8): { SetB(opcode, 0x76); cb } ("JC *", rel8): { SetB(opcode, 0x72); cb } ("JCXZ *", rel8): { SetB(opcode, 0xE3); cb } ("JE *", rel8): { SetB(opcode, 0x74); cb } ("JG *", rel8): { SetB(opcode, 0x7F); cb } ("JGE *", rel8): { SetB(opcode, 0x7D); cb } ("JL *", rel8): { SetB(opcode, 0x7C); cb } ("JLE *", rel8): { SetB(opcode, 0x7E); cb } ("JNA *", rel8): { SetB(opcode, 0x76); cb } ("JNAE *", rel8): { SetB(opcode, 0x72); cb } ("JNB *", rel8): { SetB(opcode, 0x73); cb } ("JNBE *", rel8): { SetB(opcode, 0x77); cb } ("JNC *", rel8): { SetB(opcode, 0x73); cb } ("JNE *", rel8): { SetB(opcode, 0x75); cb } ("JNG *", rel8): { SetB(opcode, 0x7E); cb } ("JNGE *", rel8): { SetB(opcode, 0x7C); cb } ("JNL *", rel8): { SetB(opcode, 0x7D); cb } ("JNLE *", rel8): { SetB(opcode, 0x7F); cb } ("JNO *", rel8): { SetB(opcode, 0x71); cb } ("JNP *", rel8): { SetB(opcode, 0x7B); cb } ("JNS *", rel8): { SetB(opcode, 0x79); cb } ("JNZ *", rel8): { SetB(opcode, 0x75); cb } ("JO *", rel8): { SetB(opcode, 0x70); cb } ("JP *", rel8): { SetB(opcode, 0x7A); cb } ("JPE *", rel8): { SetB(opcode, 0x7A); cb } ("JPO *", rel8): { SetB(opcode, 0x7B); cb } ("JS *", rel8): { SetB(opcode, 0x78); cb } ("JZ *", rel8): { SetB(opcode, 0x74); cb } ("JMP *", rel16): { SetB(opcode, 0xE9); cw } ("JMP *", ptr16:16): { SetB(opcode, 0xEA); cd } ("JMP *", rel8): { SetB(opcode, 0xEB); cb } ("JMP *", rm16): { SetB(opcode, 0xFF); /4 } //³ JMP FAR m16:16 ³ FF /5 ³ ("LAHF"): { SetB(opcode, 0x9F); } ("LDS *,*", r16,m16:16): { SetB(opcode, 0xC4); /r } ("LEA *,*", r16,rm16): { SetB(opcode, 0x8D); /r } ("LEAVE"): { SetB(opcode, 0xC9); } ("LES *,*", r16,m16:16): { SetB(opcode, 0xC5); /r } ("LOCK"): { SetB(opcode, 0xF0); } ("LODSB"): { SetB(opcode, 0xAC); } ("LODSW"): { SetB(opcode, 0xAD); } ("LOOP *", rel8): { SetB(opcode, 0xE2); cb } ("LOOPE *", rel8): { SetB(opcode, 0xE1); cb } ("LOOPNE *", rel8): { SetB(opcode, 0xE0); cb } ("LOOPNZ *", rel8): { SetB(opcode, 0xE0); cb } ("LOOPZ *", rel8): { SetB(opcode, 0xE1); cb } ("MOV *,*", r8,i8): { SetB(opcode, 0xB0+rb); ib } ("MOV *,*", r16,i16): { SetB(opcode, 0xB8+rw); iw } ("MOV *,*", AL,m8): { SetB(opcode, 0xA0); iw } ("MOV *,*", AX,m16): { SetB(opcode, 0xA1); iw } ("MOV *,*", m8,AL): { SetB(opcode, 0xA2); iw } ("MOV *,*", m16,AX): { SetB(opcode, 0xA3); iw } ("MOV *,*", r8,rm8): { SetB(opcode, 0x8A); /r } ("MOV *,*", r16,rm16): { SetB(opcode, 0x8B); /r } ("MOV *,*", rm8,r8): { SetB(opcode, 0x88); /r } ("MOV *,*", rm16,r16): { SetB(opcode, 0x89); /r } ("MOV *,*", rm8,i8): { SetB(opcode, 0xC6); /0 ib } ("MOV *,*", rm16,i16): { SetB(opcode, 0xC7); /0 iw } ("MOV *,*", r16,segreg): { SetB(opcode, 0x8C); /r } ("MOV *,*", segreg,r16): { SetB(opcode, 0x8E); /r } ("MOVSB"): { SetB(opcode, 0xA4); } ("MOVSW"): { SetB(opcode, 0xA5); } ("MUL *", rm8): { SetB(opcode, 0xF6); /4 } ("MUL *", rm16): { SetB(opcode, 0xF7); /4 } ("NEG *", rm8): { SetB(opcode, 0xF6); /3 } ("NEG *", rm16): { SetB(opcode, 0xF7); /3 } ("NOP"): { SetB(opcode, 0x90); } ("NOT *", rm8): { SetB(opcode, 0xF6); /2 } ("NOT *", rm16): { SetB(opcode, 0xF7); /2 } ("OR *,*", AL,i8): { SetB(opcode, 0x0C); ib } ("OR *,*", AX,i16): { SetB(opcode, 0x0D); iw } ("OR *,*", r8,rm8): { SetB(opcode, 0x0A); /r } ("OR *,*", r16,rm16): { SetB(opcode, 0x0B); /r } ("OR *,*", rm8,r8): { SetB(opcode, 0x08); /r } ("OR *,*", rm16,r16): { SetB(opcode, 0x09); /r } ("OR *,*", rm8,i8): { SetB(opcode, 0x80); /1 ib } ("OR *,*", rm16,i8): { SetB(opcode, 0x83); /1 ib } ("OR *,*", rm16,i16): { SetB(opcode, 0x81); /1 iw } ("OUT *,*", DX,AL): { SetB(opcode, 0xEE); } ("OUT *,*", DX,AX): { SetB(opcode, 0xEF); } ("OUT *,*", i8,AL): { SetB(opcode, 0xE6); ib } ("OUT *,*", i8,AX): { SetB(opcode, 0xE7); iw } ("OUTSB"): { SetB(opcode, 0x6E); } ("OUTSW"): { SetB(opcode, 0x6F); } ("POP *", r16): { SetB(opcode, 0x58+rw); } ("POP *", rm16): { SetB(opcode, 0x8F); /0 iw } ("POP *", DS): { SetB(opcode, 0x1F); } ("POP *", ES): { SetB(opcode, 0x07); } ("POP *", SS): { SetB(opcode, 0x17); } ("POPA"): { SetB(opcode, 0x61); } ("POPF"): { SetB(opcode, 0x9D); } ("PUSH *", r16): { SetB(opcode, 0x50+rw); } ("PUSH *", rm16): { SetB(opcode, 0xFF); /6 } ("PUSH *", i8): { SetB(opcode, 0x6A); ib } ("PUSH *", i16): { SetB(opcode, 0x68); iw } ("PUSH *", CS): { SetB(opcode, 0x0E); } ("PUSH *", DS): { SetB(opcode, 0x1E); } ("PUSH *", ES): { SetB(opcode, 0x06); } ("PUSH *", SS): { SetB(opcode, 0x16); } ("PUSHA"): { SetB(opcode, 0x60); } ("PUSHF"): { SetB(opcode, 0x9C); } ("RCL *,*", rm8,1): { SetB(opcode, 0xD0); /2 } ("RCL *,*", rm16,1): { SetB(opcode, 0xD1); /2 } ("RCL *,*", rm8,CL): { SetB(opcode, 0xD2); /2 } ("RCL *,*", rm16,CL): { SetB(opcode, 0xD3); /2 } ("RCL *,*", rm8,i8): { SetB(opcode, 0xC0); /2 ib } ("RCL *,*", rm16,i8): { SetB(opcode, 0xC1); /2 ib } ("RCR *,*", rm8,1): { SetB(opcode, 0xD0); /3 } ("RCR *,*", rm16,1): { SetB(opcode, 0xD1); /3 } ("RCR *,*", rm8,CL): { SetB(opcode, 0xD2); /3 } ("RCR *,*", rm16,CL): { SetB(opcode, 0xD3); /3 } ("RCR *,*", rm8,i8): { SetB(opcode, 0xC0); /3 ib } ("RCR *,*", rm16,i8): { SetB(opcode, 0xC1); /3 ib } ("REP"): { SetB(opcode, 0xF3); } ("REPE"): { SetB(opcode, 0xF2); } ("REPNE"): { SetB(opcode, 0xF3); } ("RET *", i16): { SetB(opcode, 0xC2); iw } ("RET"): { SetB(opcode, 0xC3); } ("RETF *", i16): { SetB(opcode, 0xCA); iw } ("RETF"): { SetB(opcode, 0xCB); } ("ROL *,*", rm8,1): { SetB(opcode, 0xD0); /0 } ("ROL *,*", rm16,1): { SetB(opcode, 0xD1); /0 } ("ROL *,*", rm8,CL): { SetB(opcode, 0xD2); /0 } ("ROL *,*", rm16,CL): { SetB(opcode, 0xD3); /0 } ("ROL *,*", rm8,i8): { SetB(opcode, 0xC0); /0 ib } ("ROL *,*", rm16,i8): { SetB(opcode, 0xC1); /0 ib } ("ROR *,*", rm8,1): { SetB(opcode, 0xD0); /1 } ("ROR *,*", rm16,1): { SetB(opcode, 0xD1); /1 } ("ROR *,*", rm8,CL): { SetB(opcode, 0xD2); /1 } ("ROR *,*", rm16,CL): { SetB(opcode, 0xD3); /1 } ("ROR *,*", rm8,i8): { SetB(opcode, 0xC0); /1 ib } ("ROR *,*", rm16,i8): { SetB(opcode, 0xC1); /1 ib } ("SAHF"): { SetB(opcode, 0x9E); } ("SAL *,*", rm8,1): { SetB(opcode, 0xD0); /4 } ("SAL *,*", rm16,1): { SetB(opcode, 0xD1); /4 } ("SAL *,*", rm8,CL): { SetB(opcode, 0xD2); /4 } ("SAL *,*", rm16,CL): { SetB(opcode, 0xD3); /4 } ("SAL *,*", rm8,i8): { SetB(opcode, 0xC0); /4 ib } ("SAL *,*", rm16,i8): { SetB(opcode, 0xC1); /4 ib } ("SAR *,*", rm8,1): { SetB(opcode, 0xD0); /7 } ("SAR *,*", rm16,1): { SetB(opcode, 0xD1); /7 } ("SAR *,*", rm8,CL): { SetB(opcode, 0xD2); /7 } ("SAR *,*", rm16,CL): { SetB(opcode, 0xD3); /7 } ("SAR *,*", rm8,i8): { SetB(opcode, 0xC0); /7 ib } ("SAR *,*", rm16,i8): { SetB(opcode, 0xC1); /7 ib } ("SBB *,*", AL,i8): { SetB(opcode, 0x1C); ib } ("SBB *,*", AX,i16): { SetB(opcode, 0x1D); iw } ("SBB *,*", r8,rm8): { SetB(opcode, 0x1A); /r } ("SBB *,*", r16,rm16): { SetB(opcode, 0x1B); /r } ("SBB *,*", rm8,r8): { SetB(opcode, 0x18); /r } ("SBB *,*", rm16,r16): { SetB(opcode, 0x19); /r } ("SBB *,*", rm8,i8): { SetB(opcode, 0x80); /3 ib } ("SBB *,*", rm16,i8): { SetB(opcode, 0x83); /3 ib } ("SBB *,*", rm16,i16): { SetB(opcode, 0x81); /3 iw } ("SCASB"): { SetB(opcode, 0xAE); } ("SCASW"): { SetB(opcode, 0xAF); } ("SEGCS"): { SetB(opcode, 0x2E); } ("SEGDS"): { SetB(opcode, 0x3E); } ("SEGES"): { SetB(opcode, 0x26); } ("SEGSS"): { SetB(opcode, 0x36); } ("SETALC"): { SetB(opcode, 0xD6); } ("SHL *,*", rm8,1): { SetB(opcode, 0xD0); /4 } ("SHL *,*", rm16,1): { SetB(opcode, 0xD1); /4 } ("SHL *,*", rm8,CL): { SetB(opcode, 0xD2); /4 } ("SHL *,*", rm16,CL): { SetB(opcode, 0xD3); /4 } ("SHL *,*", rm8,i8): { SetB(opcode, 0xC0); /4 ib } ("SHL *,*", rm16,i8): { SetB(opcode, 0xC1); /4 ib } ("SHR *,*", rm8,1): { SetB(opcode, 0xD0); /5 } ("SHR *,*", rm16,1): { SetB(opcode, 0xD1); /5 } ("SHR *,*", rm8,CL): { SetB(opcode, 0xD2); /5 } ("SHR *,*", rm16,CL): { SetB(opcode, 0xD3); /5 } ("SHR *,*", rm8,i8): { SetB(opcode, 0xC0); /5 ib } ("SHR *,*", rm16,i8): { SetB(opcode, 0xC1); /5 ib } ("STC"): { SetB(opcode, 0xF9); } ("STD"): { SetB(opcode, 0xFD); } ("STI"): { SetB(opcode, 0xFB); } ("STOSB"): { SetB(opcode, 0xAA); } ("STOSW"): { SetB(opcode, 0xAB); } ("SUB *,*", AL,i8): { SetB(opcode, 0x2C); ib } ("SUB *,*", AX,i16): { SetB(opcode, 0x2D); iw } ("SUB *,*", r8,rm8): { SetB(opcode, 0x2A); /r } ("SUB *,*", r16,rm16): { SetB(opcode, 0x2B); /r } ("SUB *,*", rm8,r8): { SetB(opcode, 0x28); /r } ("SUB *,*", rm16,r16): { SetB(opcode, 0x29); /r } ("SUB *,*", rm8,i8): { SetB(opcode, 0x80); /5 ib } ("SUB *,*", rm16,i8): { SetB(opcode, 0x83); /5 ib } ("SUB *,*", rm16,i16): { SetB(opcode, 0x81); /5 iw } ("TEST *,*", AL,i8): { SetB(opcode, 0xA8); ib } ("TEST *,*", AL,i16): { SetB(opcode, 0xA9); iw } ("TEST *,*", rm8,r8): { SetB(opcode, 0x84); /r } ("TEST *,*", rm16,r16): { SetB(opcode, 0x85); /r } ("TEST *,*", rm8,i8): { SetB(opcode, 0xF6); /0 ib } ("TEST *,*", rm16,i16): { SetB(opcode, 0xF7); /0 iw } ("WAIT"): { SetB(opcode, 0x9B); } ("XCHG *,*", AX,r16): { SetB(opcode, 0x90+rw); } ("XCHG *,*", r8,rm8): { SetB(opcode, 0x86); /r } ("XCHG *,*", rm8,r8): { SetB(opcode, 0x86); /r } ("XCHG *,*", r16,rm16): { SetB(opcode, 0x87); /r } ("XCHG *,*", rm16,r16): { SetB(opcode, 0x87); /r } ("XLATB"): { SetB(opcode, 0xD7); } ("XOR *,*", AL,i8): { SetB(opcode, 0x34); ib } ("XOR *,*", AX,i16): { SetB(opcode, 0x35); iw } ("XOR *,*", r8,rm8): { SetB(opcode, 0x32); /r } ("XOR *,*", r16,rm16): { SetB(opcode, 0x33); /r } ("XOR *,*", rm8,r8): { SetB(opcode, 0x30); /r } ("XOR *,*", rm16,r16): { SetB(opcode, 0x31); /r } ("XOR *,*", rm8,i8): { SetB(opcode, 0x80); /6 ib } ("XOR *,*", rm16,i8): { SetB(opcode, 0x83); /6 ib } ("XOR *,*", rm16,i16): { SetB(opcode, 0x81); /6 iw } */