421 lines
12 KiB
C
421 lines
12 KiB
C
/*
|
|
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
*/
|
|
#define RCSID3 "$Header$"
|
|
|
|
/*
|
|
* INTEL 80386 keywords
|
|
*
|
|
* No system registers for now ...
|
|
*/
|
|
|
|
0, USE16, 0, ".use16",
|
|
0, USE32, 0, ".use32",
|
|
0, R32, 0, "ax",
|
|
0, R32, 1, "cx",
|
|
0, R32, 2, "dx",
|
|
0, R32, 3, "bx",
|
|
0, R32, 4, "sp",
|
|
0, R32, 5, "bp",
|
|
0, R32, 6, "si",
|
|
0, R32, 7, "di",
|
|
0, R32, 0, "eax",
|
|
0, R32, 1, "ecx",
|
|
0, R32, 2, "edx",
|
|
0, R32, 3, "ebx",
|
|
0, R32, 4, "esp",
|
|
0, R32, 5, "ebp",
|
|
0, R32, 6, "esi",
|
|
0, R32, 7, "edi",
|
|
0, R8, 0, "al",
|
|
0, R8, 1, "cl",
|
|
0, R8, 2, "dl",
|
|
0, R8, 3, "bl",
|
|
0, R8, 4, "ah",
|
|
0, R8, 5, "ch",
|
|
0, R8, 6, "dh",
|
|
0, R8, 7, "bh",
|
|
0, RSEG, 0, "es",
|
|
0, RSEG, 1, "cs",
|
|
0, RSEG, 2, "ss",
|
|
0, RSEG, 3, "ds",
|
|
0, RSEG, 4, "fs",
|
|
0, RSEG, 5, "gs",
|
|
0, RSYSCR, 0, "cr0",
|
|
0, RSYSCR, 2, "cr2",
|
|
0, RSYSCR, 3, "cr3",
|
|
0, RSYSDR, 0, "dr0",
|
|
0, RSYSDR, 1, "dr1",
|
|
0, RSYSDR, 2, "dr2",
|
|
0, RSYSDR, 3, "dr3",
|
|
0, RSYSDR, 6, "dr6",
|
|
0, RSYSDR, 7, "dr7",
|
|
0, RSYSTR, 3, "tr3", /* i486 */
|
|
0, RSYSTR, 4, "tr4", /* i486 */
|
|
0, RSYSTR, 5, "tr5", /* i486 */
|
|
0, RSYSTR, 6, "tr6",
|
|
0, RSYSTR, 7, "tr7",
|
|
0, ADDOP, 000, "addb",
|
|
0, ADDOP, 001, "add",
|
|
0, ADDOP, 010, "orb",
|
|
0, ADDOP, 011, "or",
|
|
0, ADDOP, 020, "adcb",
|
|
0, ADDOP, 021, "adc",
|
|
0, ADDOP, 030, "sbbb",
|
|
0, ADDOP, 031, "sbb",
|
|
0, ADDOP, 040, "andb",
|
|
0, ADDOP, 041, "and",
|
|
0, ADDOP, 050, "subb",
|
|
0, ADDOP, 051, "sub",
|
|
0, ADDOP, 060, "xorb",
|
|
0, ADDOP, 061, "xor",
|
|
0, ADDOP, 070, "cmpb",
|
|
0, ADDOP, 071, "cmp",
|
|
0, BITTEST, 04, "bt",
|
|
0, BITTEST, 05, "bts",
|
|
0, BITTEST, 06, "btr",
|
|
0, BITTEST, 07, "btc",
|
|
0, CALFOP, 030+(0232<<8), "callf",
|
|
0, CALFOP, 050+(0352<<8), "jmpf",
|
|
0, CALLOP, 020+(0350<<8), "call",
|
|
0, CALLOP, 040+(0351<<8), "jmp",
|
|
0, ENTER, 0310, "enter",
|
|
0, EXTEND, 0267, "movzx",
|
|
0, EXTEND, 0266, "movzxb",
|
|
0, EXTEND, 0277, "movsx",
|
|
0, EXTEND, 0276, "movsxb",
|
|
0, EXTOP, 0002, "lar",
|
|
0, EXTOP, 0003, "lsl",
|
|
0, EXTOP, 0274, "bsf",
|
|
0, EXTOP, 0275, "bsr",
|
|
0, EXTOP1, 0000, "sldt",
|
|
0, EXTOP1, 0001, "sgdt",
|
|
0, EXTOP1, 0010, "str",
|
|
0, EXTOP1, 0011, "sidt",
|
|
0, EXTOP1, 0020, "lldt",
|
|
0, EXTOP1, 0021, "lgdt",
|
|
0, EXTOP1, 0030, "ltr",
|
|
0, EXTOP1, 0031, "lidt",
|
|
0, EXTOP1, 0040, "verr",
|
|
0, EXTOP1, 0041, "smsw",
|
|
0, EXTOP1, 0050, "verw",
|
|
0, EXTOP1, 0061, "lmsw",
|
|
0, IMUL, 00, "imul",
|
|
0, IMULB, 050, "imulb",
|
|
0, INCOP, 000, "incb",
|
|
0, INCOP, 001, "inc",
|
|
0, INCOP, 010, "decb",
|
|
0, INCOP, 011, "dec",
|
|
0, INT, 0, "int",
|
|
0, IOOP, 0344, "inb",
|
|
0, IOOP, 0345, "in",
|
|
0, IOOP, 0346, "outb",
|
|
0, IOOP, 0347, "out",
|
|
0, JOP, 0340, "loopne",
|
|
0, JOP, 0340, "loopnz",
|
|
0, JOP, 0341, "loope",
|
|
0, JOP, 0341, "loopz",
|
|
0, JOP, 0342, "loop",
|
|
0, JOP, 0343, "jcxz",
|
|
0, JOP, 0343, "jecxz",
|
|
0, JOP2, 0000, "jo",
|
|
0, JOP2, 0001, "jno",
|
|
0, JOP2, 0002, "jb",
|
|
0, JOP2, 0002, "jc",
|
|
0, JOP2, 0002, "jnae",
|
|
0, JOP2, 0003, "jae",
|
|
0, JOP2, 0003, "jnb",
|
|
0, JOP2, 0003, "jnc",
|
|
0, JOP2, 0004, "je",
|
|
0, JOP2, 0004, "jz",
|
|
0, JOP2, 0005, "jne",
|
|
0, JOP2, 0005, "jnz",
|
|
0, JOP2, 0006, "jbe",
|
|
0, JOP2, 0006, "jna",
|
|
0, JOP2, 0007, "ja",
|
|
0, JOP2, 0007, "jnbe",
|
|
0, JOP2, 0010, "js",
|
|
0, JOP2, 0011, "jns",
|
|
0, JOP2, 0012, "jp",
|
|
0, JOP2, 0012, "jpe",
|
|
0, JOP2, 0013, "jnp",
|
|
0, JOP2, 0013, "jpo",
|
|
0, JOP2, 0014, "jl",
|
|
0, JOP2, 0014, "jnge",
|
|
0, JOP2, 0015, "jge",
|
|
0, JOP2, 0015, "jnl",
|
|
0, JOP2, 0016, "jle",
|
|
0, JOP2, 0016, "jng",
|
|
0, JOP2, 0017, "jg",
|
|
0, JOP2, 0017, "jnle",
|
|
0, LEAOP, 0142, "bound",
|
|
0, LEAOP, 0215, "lea",
|
|
0, LEAOP, 0304, "les",
|
|
0, LEAOP, 0305, "lds",
|
|
0, LEAOP2, 0262, "lss",
|
|
0, LEAOP2, 0264, "lfs",
|
|
0, LEAOP2, 0265, "lgs",
|
|
0, LSHFT, 0244, "shld",
|
|
0, LSHFT, 0254, "shrd",
|
|
0, MOV, 0, "movb",
|
|
0, MOV, 1, "mov",
|
|
0, NOOP_1, 0140, "pusha",
|
|
0, NOOP_1, 0140, "pushad",
|
|
0, NOOP_1, 0141, "popa",
|
|
0, NOOP_1, 0141, "popad",
|
|
0, NOOP_1, 0156, "outsb",
|
|
0, NOOP_1, 0157, "outs",
|
|
0, NOOP_1, 0220, "nop",
|
|
0, NOOP_1, 0230, "cbw",
|
|
0, NOOP_1, 0230, "cwde", /* same opcode as cbw! */
|
|
0, NOOP_1, 0231, "cdq", /* same opcode as cwd! */
|
|
0, NOOP_1, 0231, "cwd",
|
|
0, NOOP_1, 0233, "wait",
|
|
0, NOOP_1, 0234, "pushf",
|
|
0, NOOP_1, 0235, "popf",
|
|
0, NOOP_1, 0236, "sahf",
|
|
0, NOOP_1, 0237, "lahf",
|
|
0, NOOP_1, 0244, "movsb",
|
|
0, NOOP_1, 0245, "movs",
|
|
0, NOOP_1, 0246, "cmpsb",
|
|
0, NOOP_1, 0154, "insb",
|
|
0, NOOP_1, 0247, "cmps",
|
|
0, NOOP_1, 0155, "ins",
|
|
0, NOOP_1, 0252, "stosb",
|
|
0, NOOP_1, 0253, "stos",
|
|
0, NOOP_1, 0254, "lodsb",
|
|
0, NOOP_1, 0255, "lods",
|
|
0, NOOP_1, 0256, "scasb",
|
|
0, NOOP_1, 0257, "scas",
|
|
0, NOOP_1, 0311, "leave",
|
|
0, NOOP_1, 0316, "into",
|
|
0, NOOP_1, 0317, "iret",
|
|
0, NOOP_1, 0317, "iretd",
|
|
0, NOOP_1, 0327, "xlat",
|
|
0, NOOP_1, 0364, "hlt",
|
|
0, NOOP_1, 0365, "cmc",
|
|
0, NOOP_1, 0370, "clc",
|
|
0, NOOP_1, 0371, "stc",
|
|
0, NOOP_1, 0372, "cli",
|
|
0, NOOP_1, 0373, "sti",
|
|
0, NOOP_1, 0374, "cld",
|
|
0, NOOP_1, 0375, "std",
|
|
0, NOOP_1, 047, "daa",
|
|
0, NOOP_1, 057, "das",
|
|
0, NOOP_1, 067, "aaa",
|
|
0, NOOP_1, 077, "aas",
|
|
0, NOOP_2, 017+(06<<8), "clts",
|
|
0, NOOP_2, 0324+(012<<8), "aam",
|
|
0, NOOP_2, 0325+(012<<8), "aad",
|
|
0, NOTOP, 020, "notb",
|
|
0, NOTOP, 021, "not",
|
|
0, NOTOP, 030, "negb",
|
|
0, NOTOP, 031, "neg",
|
|
0, NOTOP, 040, "mulb",
|
|
0, NOTOP, 041, "mul",
|
|
0, NOTOP, 060, "divb",
|
|
0, NOTOP, 061, "div",
|
|
0, NOTOP, 070, "idivb",
|
|
0, NOTOP, 071, "idiv",
|
|
0, PREFIX, 0144, "fseg",
|
|
0, PREFIX, 0145, "gseg",
|
|
0, OTOGGLE, 0146, "o16", /* operand size toggle */
|
|
0, OTOGGLE, 0346, "o32", /* operand size toggle */
|
|
0, ATOGGLE, 0147, "a16", /* address size toggle */
|
|
0, ATOGGLE, 0347, "a32", /* address size toggle */
|
|
0, PREFIX, 0360, "lock",
|
|
0, PREFIX, 0362, "repne",
|
|
0, PREFIX, 0362, "repnz",
|
|
0, PREFIX, 0363, "rep",
|
|
0, PREFIX, 0363, "repe",
|
|
0, PREFIX, 0363, "repz",
|
|
0, PREFIX, 046, "eseg",
|
|
0, PREFIX, 056, "cseg",
|
|
0, PREFIX, 066, "sseg",
|
|
0, PREFIX, 076, "dseg",
|
|
0, PUSHOP, 0, "push",
|
|
0, PUSHOP, 1, "pop",
|
|
0, RET, 0303, "ret",
|
|
0, RET, 0313, "retf",
|
|
0, ROLOP, 000, "rolb",
|
|
0, ROLOP, 001, "rol",
|
|
0, ROLOP, 010, "rorb",
|
|
0, ROLOP, 011, "ror",
|
|
0, ROLOP, 020, "rclb",
|
|
0, ROLOP, 021, "rcl",
|
|
0, ROLOP, 030, "rcrb",
|
|
0, ROLOP, 031, "rcr",
|
|
0, ROLOP, 040, "salb",
|
|
0, ROLOP, 040, "shlb",
|
|
0, ROLOP, 041, "sal",
|
|
0, ROLOP, 041, "shl",
|
|
0, ROLOP, 050, "shrb",
|
|
0, ROLOP, 051, "shr",
|
|
0, ROLOP, 070, "sarb",
|
|
0, ROLOP, 071, "sar",
|
|
0, SETCC, 0000, "seto",
|
|
0, SETCC, 0001, "setno",
|
|
0, SETCC, 0002, "setb",
|
|
0, SETCC, 0002, "setnae",
|
|
0, SETCC, 0003, "setae",
|
|
0, SETCC, 0003, "setnb",
|
|
0, SETCC, 0004, "sete",
|
|
0, SETCC, 0004, "setz",
|
|
0, SETCC, 0005, "setne",
|
|
0, SETCC, 0005, "setnz",
|
|
0, SETCC, 0006, "setbe",
|
|
0, SETCC, 0006, "setna",
|
|
0, SETCC, 0007, "seta",
|
|
0, SETCC, 0007, "setnbe",
|
|
0, SETCC, 0010, "sets",
|
|
0, SETCC, 0011, "setns",
|
|
0, SETCC, 0012, "setp",
|
|
0, SETCC, 0012, "setpe",
|
|
0, SETCC, 0013, "setnp",
|
|
0, SETCC, 0013, "setpo",
|
|
0, SETCC, 0014, "setl",
|
|
0, SETCC, 0014, "setnge",
|
|
0, SETCC, 0015, "setge",
|
|
0, SETCC, 0015, "setnl",
|
|
0, SETCC, 0016, "setle",
|
|
0, SETCC, 0016, "setng",
|
|
0, SETCC, 0017, "setg",
|
|
0, SETCC, 0017, "setnle",
|
|
0, TEST, 0, "testb",
|
|
0, TEST, 1, "test",
|
|
0, XCHG, 0, "xchgb",
|
|
0, XCHG, 1, "xchg",
|
|
0, ARPLOP, 0143, "arpl",
|
|
|
|
/* Intel 80[23]87 coprocessor keywords */
|
|
|
|
0, ST, 0, "st",
|
|
|
|
0, FNOOP, FESC+1+(0xF0<<8), "f2xm1",
|
|
0, FNOOP, FESC+1+(0xE1<<8), "fabs",
|
|
0, FNOOP, FESC+1+(0xE0<<8), "fchs",
|
|
0, FNOOP, FESC+3+(0xE2<<8), "fclex",
|
|
0, FNOOP, FESC+6+(0xD9<<8), "fcompp",
|
|
0, FNOOP, FESC+2+(0xE9<<8), "fucompp",
|
|
0, FNOOP, FESC+1+(0xF6<<8), "fdecstp",
|
|
0, FNOOP, FESC+3+(0xE1<<8), "fdisi",
|
|
0, FNOOP, FESC+3+(0xE0<<8), "feni",
|
|
0, FNOOP, FESC+1+(0xF7<<8), "fincstp",
|
|
0, FNOOP, FESC+3+(0xE3<<8), "finit",
|
|
0, FNOOP, FESC+1+(0xE8<<8), "fld1",
|
|
0, FNOOP, FESC+1+(0xEA<<8), "fldl2e",
|
|
0, FNOOP, FESC+1+(0xE9<<8), "fldl2t",
|
|
0, FNOOP, FESC+1+(0xEC<<8), "fldlg2",
|
|
0, FNOOP, FESC+1+(0xED<<8), "fldln2",
|
|
0, FNOOP, FESC+1+(0xEB<<8), "fldpi",
|
|
0, FNOOP, FESC+1+(0xEE<<8), "fldz",
|
|
0, FNOOP, FESC+1+(0xD0<<8), "fnop",
|
|
0, FNOOP, FESC+1+(0xF3<<8), "fpatan",
|
|
0, FNOOP, FESC+1+(0xFF<<8), "fcos",
|
|
0, FNOOP, FESC+1+(0xFE<<8), "fsin",
|
|
0, FNOOP, FESC+1+(0xFB<<8), "fsincos",
|
|
0, FNOOP, FESC+1+(0xF8<<8), "fprem",
|
|
0, FNOOP, FESC+1+(0xF5<<8), "fprem1",
|
|
0, FNOOP, FESC+1+(0xF2<<8), "fptan",
|
|
0, FNOOP, FESC+1+(0xFC<<8), "frndint",
|
|
0, FNOOP, FESC+1+(0xFD<<8), "fscale",
|
|
0, FNOOP, FESC+1+(0xFA<<8), "fsqrt",
|
|
0, FNOOP, FESC+1+(0xE4<<8), "ftst",
|
|
0, FNOOP, FESC+1+(0xE5<<8), "fxam",
|
|
0, FNOOP, FESC+1+(0xF4<<8), "fxtract",
|
|
0, FNOOP, FESC+1+(0xF1<<8), "fyl2x",
|
|
0, FNOOP, FESC+1+(0xF9<<8), "fyl2xp1",
|
|
|
|
0, FMEM, FESC+6+(0<<11), "fiadds",
|
|
0, FMEM, FESC+2+(0<<11), "fiaddl",
|
|
0, FMEM, FESC+0+(0<<11), "fadds",
|
|
0, FMEM, FESC+4+(0<<11), "faddd",
|
|
0, FMEM, FESC+7+(4<<11), "fbld",
|
|
0, FMEM, FESC+7+(6<<11), "fbstp",
|
|
0, FMEM, FESC+6+(2<<11), "ficoms",
|
|
0, FMEM, FESC+2+(2<<11), "ficoml",
|
|
0, FMEM, FESC+0+(2<<11), "fcoms",
|
|
0, FMEM, FESC+4+(2<<11), "fcomd",
|
|
0, FMEM, FESC+6+(3<<11), "ficomps",
|
|
0, FMEM, FESC+2+(3<<11), "ficompl",
|
|
0, FMEM, FESC+0+(3<<11), "fcomps",
|
|
0, FMEM, FESC+4+(3<<11), "fcompd",
|
|
0, FMEM, FESC+6+(6<<11), "fidivs",
|
|
0, FMEM, FESC+2+(6<<11), "fidivl",
|
|
0, FMEM, FESC+0+(6<<11), "fdivs",
|
|
0, FMEM, FESC+4+(6<<11), "fdivd",
|
|
0, FMEM, FESC+6+(7<<11), "fidivrs",
|
|
0, FMEM, FESC+2+(7<<11), "fidivrl",
|
|
0, FMEM, FESC+0+(7<<11), "fdivrs",
|
|
0, FMEM, FESC+4+(7<<11), "fdivrd",
|
|
0, FMEM, FESC+7+(5<<11), "fildq",
|
|
0, FMEM, FESC+7+(0<<11), "filds",
|
|
0, FMEM, FESC+3+(0<<11), "fildl",
|
|
0, FMEM, FESC+1+(0<<11), "flds",
|
|
0, FMEM, FESC+5+(0<<11), "fldd",
|
|
0, FMEM, FESC+3+(5<<11), "fldx",
|
|
0, FMEM, FESC+1+(5<<11), "fldcw",
|
|
0, FMEM, FESC+1+(4<<11), "fldenv",
|
|
0, FMEM, FESC+6+(1<<11), "fimuls",
|
|
0, FMEM, FESC+2+(1<<11), "fimull",
|
|
0, FMEM, FESC+0+(1<<11), "fmuls",
|
|
0, FMEM, FESC+4+(1<<11), "fmuld",
|
|
0, FMEM, FESC+5+(4<<11), "frstor",
|
|
0, FMEM, FESC+5+(6<<11), "fsave",
|
|
0, FMEM, FESC+7+(2<<11), "fists",
|
|
0, FMEM, FESC+3+(2<<11), "fistl",
|
|
0, FMEM, FESC+1+(2<<11), "fsts",
|
|
0, FMEM, FESC+5+(2<<11), "fstd",
|
|
0, FMEM, FESC+7+(7<<11), "fistpq",
|
|
0, FMEM, FESC+7+(3<<11), "fistps",
|
|
0, FMEM, FESC+3+(3<<11), "fistpl",
|
|
0, FMEM, FESC+1+(3<<11), "fstps",
|
|
0, FMEM, FESC+5+(3<<11), "fstpd",
|
|
0, FMEM, FESC+3+(7<<11), "fstpx",
|
|
0, FMEM, FESC+1+(7<<11), "fstcw",
|
|
0, FMEM, FESC+1+(6<<11), "fstenv",
|
|
0, FMEM_AX, FESC+5+(7<<11), "fstsw",
|
|
0, FMEM, FESC+6+(4<<11), "fisubs",
|
|
0, FMEM, FESC+2+(4<<11), "fisubl",
|
|
0, FMEM, FESC+0+(4<<11), "fsubs",
|
|
0, FMEM, FESC+4+(4<<11), "fsubd",
|
|
0, FMEM, FESC+6+(5<<11), "fisubrs",
|
|
0, FMEM, FESC+2+(5<<11), "fisubrl",
|
|
0, FMEM, FESC+0+(5<<11), "fsubrs",
|
|
0, FMEM, FESC+4+(5<<11), "fsubrd",
|
|
|
|
0, FST_I, FESC+1+(0xC0<<8), "fld",
|
|
0, FST_I, FESC+5+(0xD0<<8), "fst",
|
|
0, FST_I, FESC+5+(0xD8<<8), "fstp",
|
|
0, FST_I, FESC+1+(0xC8<<8), "fxch",
|
|
0, FST_I, FESC+0+(0xD0<<8), "fcom",
|
|
0, FST_I, FESC+5+(0xE0<<8), "fucom",
|
|
0, FST_I, FESC+0+(0xD8<<8), "fcomp",
|
|
0, FST_I, FESC+5+(0xE8<<8), "fucomp",
|
|
0, FST_I, FESC+5+(0xC0<<8), "ffree",
|
|
|
|
0, FST_ST, FESC+0+(0xC0<<8), "fadd",
|
|
0, FST_ST, FESC+2+(0xC0<<8), "faddp",
|
|
0, FST_ST2, FESC+0+(0xF0<<8), "fdiv",
|
|
0, FST_ST2, FESC+2+(0xF0<<8), "fdivp",
|
|
0, FST_ST2, FESC+0+(0xF8<<8), "fdivr",
|
|
0, FST_ST2, FESC+2+(0xF8<<8), "fdivrp",
|
|
0, FST_ST, FESC+0+(0xC8<<8), "fmul",
|
|
0, FST_ST, FESC+2+(0xC8<<8), "fmulp",
|
|
0, FST_ST2, FESC+0+(0xE0<<8), "fsub",
|
|
0, FST_ST2, FESC+2+(0xE0<<8), "fsubp",
|
|
0, FST_ST2, FESC+0+(0xE8<<8), "fsubr",
|
|
0, FST_ST2, FESC+2+(0xE8<<8), "fsubrp",
|
|
|
|
/* Intel 486 instructions */
|
|
0, EXTOPBW, 0xC0, "xaddb",
|
|
0, EXTOPBW, 0xC1, "xadd",
|
|
0, EXTOPBW, 0xA6, "cmpxchgb",
|
|
0, EXTOPBW, 0xA7, "cmpxchg",
|
|
0, BSWAP, 0xC8, "bswap",
|
|
0, NOOP_2, 017+(010<<8), "invd",
|
|
0, EXTOP1, 071, "invlpg",
|
|
0, NOOP_2, 017+(011<<8), "wbinvd",
|
|
|