Metropoli BBS
VIEWER: opmap.c MODE: TEXT (ASCII)
#pragma pack(1)
/* One-Byte Opcode Map */
char	*OpMap1[256]={
/* 0 */
	"add %Eb,%Gb",  "add %Ev,%Gv",  "add %Gb,%Eb",  "add %Gv,%Ev",
	"add al,%Ib",   "add %eax,%Iv", "push es",      "pop es",
	"or %Eb,%Gb",   "or %Ev,%Gv",   "or %Gb,%Eb",   "or %Gv,%Ev",
	"or al,%Ib",    "or %eax,%Iv",  "push cs",      "%2 ",
/* 1 */
	"adc %Eb,%Gb",  "adc %Ev,%Gv",  "adc %Gb,%Eb",  "adc %Gv,%Ev",
	"adc al,%Ib",   "adc %eax,%Iv", "push ss",      "pop ss",
	"sbb %Eb,%Gb",  "sbb %Ev,%Gv",  "sbb %Gb,%Eb",  "sbb %Gv,%Ev",
	"sbb al,%Ib",   "sbb %eax,%Iv", "push ds",      "pop ds",
/* 2 */
	"and %Eb,%Gb",  "and %Ev,%Gv",  "and %Gb,%Eb",  "and %Gv,%Ev",
	"and al,%Ib",   "and %eax,%Iv", "%pe",          "daa",
	"sub %Eb,%Gb",  "sub %Ev,%Gv",  "sub %Gb,%Eb",  "sub %Gv,%Ev",
	"sub al,%Ib",   "sub %eax,%Iv", "%pc",          "das",
/* 3 */
	"xor %Eb,%Gb",  "xor %Ev,%Gv",  "xor %Gb,%Eb",  "xor %Gv,%Ev",
	"xor al,%Ib",   "xor %eax,%Iv", "%ps",          "aaa",
	"cmp %Eb,%Gb",  "cmp %Ev,%Gv",  "cmp %Gb,%Eb",  "cmp %Gv,%Ev",
	"cmp al,%Ib",   "cmp %eax,%Iv", "%pd",          "aas",
/* 4 */
	"inc %eax",     "inc %ecx",     "inc %edx",     "inc %ebx",
	"inc %esp",     "inc %ebp",     "inc %esi",     "inc %edi",
	"dec %eax",     "dec %ecx",     "dec %edx",     "dec %ebx",
	"dec %esp",     "dec %ebp",     "dec %esi",     "dec %edi",
/* 5 */
	"push %eax",    "push %ecx",    "push %edx",    "push %ebx",
	"push %esp",    "push %ebp",    "push %esi",    "push %edi",
	"pop %eax",     "pop %ecx",     "pop %edx",     "pop %ebx",
	"pop %esp",     "pop %ebp",     "pop %esi",     "pop %edi",
/* 6 */
	"pusha%d ",     "popa%d ",      "bound %Gv,%Ma","arpl %Ew,%Gw",
	"%pf",          "%pg",          "%so",          "%sa",
	"push %Iv",     "imul %Gv,%Ev,%Iv","push %3v%Ib",  "imul %Gv,%Ev,%Ib",
	"insb %Yb,dx",  "ins%wd %Yv,dx","outsb dx,%Xb", "outs%wd dx,%Xv",
/* 7 */
	"jo %Jb",       "jno %Jb",      "jb %Jb",       "jnb %Jb",
	"jz %Jb",       "jnz %Jb",      "jbe %Jb",      "jnbe %Jb",
	"js %Jb",       "jns %Jb",      "jp %Jb",       "jnp %Jb",
	"jl %Jb",       "jnl %Jb",      "jng %Jb",      "jg %Jb",
/* 8 */
	"%g0 %Eb,%Ib",  "%g0 %Ev,%Iv",  "%g0 %Eb,%Ib","%g0 %3v%Ev,%Ib",
	"test %Eb,%Gb", "test %Ev,%Gv", "xchg %Eb,%Gb", "xchg %Ev,%Gv",
	"mov %Eb,%Gb",  "mov %Ev,%Gv",  "mov %Gb,%Eb",  "mov %Gv,%Ev",
	"mov %Ev,%Sw",  "lea %Gv,%M ",  "mov %Sw,%Ew",  "pop %Ev",
/* 9 */
	"nop",        "xchg %eax,%ecx","xchg %eax,%edx","xchg %eax,%ebx",
     "xchg %eax,%esp","xchg %eax,%ebp","xchg %eax,%esi","xchg %eax,%edi",
	"c%bw%wd%qe",   "c%w d%qq",     "call %Ap",     "wait",
	"pushf%d ",     "popf%d ",      "sahf",         "lahf",
/* A */
	"mov al,%Ob",   "mov %eax,%Ov", "mov %Ob,al",   "mov %Ov,%eax",
     "movs byte ptr %Yb,%Xb","movs %d word ptr %Yv,%Xv","cmps byte ptr %Yb,%Xb","cmps %d word ptr %Yv,%Xv",
"test al,%Ib",  "test %eax,%Iv","stos byte ptr %Yb,al", "stos %d word ptr %Yv,%eax",
     "lods byte ptr al,%Xb","lods %d word ptr %eax,%Xv","scas byte ptr %Yb,al", "scas %d word ptr %Yv,%eax",
/* B */
	"mov al,%Ib",   "mov cl,%Ib",   "mov dl,%Ib",   "mov bl,%Ib",
	"mov ah,%Ib",   "mov ch,%Ib",   "mov dh,%Ib",   "mov bh,%Ib",
	"mov %eax,%Iv", "mov %ecx,%Iv", "mov %edx,%Iv", "mov %ebx,%Iv",
	"mov %esp,%Iv", "mov %ebp,%Iv", "mov %esi,%Iv", "mov %edi,%Iv",
/* C */
	"%g1 %Eb,%Ib",  "%g1 %Ev,%Ib",  "ret %Iw",      "ret",
	"les %Gv,%Mp",  "lds %Gv,%Mp",  "mov %Eb,%Ib",  "mov %Ev,%Iv",
	"enter %Iw,%Ib","leave",        "retf %Iw",     "retf",
	"int 3",        "int %Ib",      "into",         "iret%d ",
/* D */
	"%g1 %Eb,1",    "%g1 %Ev,1",    "%g1 %Eb,cl",   "%g1 %Ev,cl",
//	  "aam%11",       "aad%11",       "salc",         "xlat",
	"aam %Ib",      "aad %Ib",      "salc",         "xlat",
	"%f0",          "%f1",          "%f2",          "%f3",
	"%f4",          "%f5",          "%f6",          "%f7",
/* E */
	"loopne %Jb",   "loope %Jb",    "loop %Jb",     "j%aecxz %Jb",
	"in al,%Ib",    "in %eax,%Ib",  "out %Ib,al",   "out %Ib,%eax",
	"call %Jv",     "jmp %Jv",      "jmp %Ap",      "jmp %Jb",
	"in al,dx",     "in %eax,dx",   "out dx,al",    "out dx,%eax",
/* F */
	"lock %p ",     0,              "repne %p ",    "repe %p ",
	"hlt",          "cmc",          "%rb%g2",       "%rv%g2",
	"clc",          "stc",          "cli",          "sti",
	"cld",          "std",          "%g3",          "%g4" };

/* Two-Byte Opcode Map (first byte is 0Fh) */
char	*Second[256]={
/* 0 */
	"%g5",          "%g6",          "lar %Gv,%Ew",  "lsl %Gv,%Ew",
	0,		"loadall",      "clts",         "loadalld",
	"invd",         "wbinvd",       0,              "ud2",
	0,		0,		0,		0,

/* 1 */
	"mov %Eb,%Gb",  "mov %Gv,%Ev",  "mov %Gb,%Eb",  "mov %Ev,%Gv",
	0,		0,		0,		0,
	0,		0,		0,		0,
	0,		0,		0,		0,

/* 2 */
	"mov %Rd,%Cd",  "mov %Rd,%Dd",  "mov %Cd,%Rd",  "mov %Dd,%Rd",
	"mov %Rd,%Td",  0,              "mov %Td,%Rd",  0,
	0,		0,		0,		0,
	0,		0,		0,		0,

/* 3 */
	"wrmsr",        "rdtsc",        "rdmsr",        "rdpmc",
	0,		0,		0,		0,
	0,		0,		0,		0,
	0,		0,		0,		0,

/* 4 */
       "cmovo %Gv,%Ev","cmovno %Gv,%Ev","cmovb %Gv,%Ev","cmovnb %Gv,%Ev",
       "cmovz %Gv,%Ev","cmovnz %Gv,%Ev","cmovbe %Gv,%Ev","cmovnbe %Gv,%Ev",
       "cmovs %Gv,%Ev","cmovns %Gv,%Ev","cmovp %Gv,%Ev","cmovnp %Gv,%Ev",
       "cmovl %Gv,%Ev","cmovnl %Gv,%Ev","cmovng %Gv,%Ev","cmovg %Gv,%Ev",

/* 5 */
	0,		0,		0,		0,
	0,		0,		0,		0,
	0,		0,		0,		0,
	0,		0,		0,		0,

/* 6 */
 "punpcklbw %Pq,%Qd","punpcklwd %Pq,%Qd","punockldq %Pq,%Qd","packusdw %Pq,%Qd",
     "pcmpgtb %Pq,%Qd","pcmpgtw %Pq,%Qd","pcmpgtd %Pq,%Qd","packsswb %Pq,%Qd",
 "punpckhbw %Pq,%Qd","punpckhwd %Pq,%Qd","punpckhdq %Pq,%Qd","packssdw %Pq,%Qd",
	0,		0,		"movd %Pd,%Ed", "movq %Pq,%Qq",

/* 7 */
	0,		"%g9w %Pq,%Ib", "%g9d %Pq,%Ib", "%g9q %Pq,%Ib",
    "pcmpeqb %Pq,%Qd","pcmpeqw %Pq,%Qd","pcmpeqd %Pq,%Qd","emms",
	0,		0,		0,		0,
	0,		0,		"movd %Ed,%Pd", "movq %Qq,%Pq",

/* 8 */
	"jo %Jv",       "jno %Jv",      "jb %Jv",       "jnb %Jv",
	"jz %Jv",       "jnz %Jv",      "jna %Jv",      "ja %Jv",
	"js %Jv",       "jns %Jv",      "jp %Jv",       "jnp %Jv",
	"jl %Jv",       "jnl %Jv",      "jng %Jv",      "jg %Jv",

/* 9 */
	"seto %Eb",     "setno %Eb",    "setb %Eb",     "setnb %Eb",
	"setz %Eb",     "setnz %Eb",    "setna %Eb",    "seta %Eb",
	"sets %Eb",     "setns %Eb",    "setp %Eb",     "setnp %Eb",
	"setl %Eb",     "setnl %Eb",    "setng %Eb",    "setg %Eb",

/* A */
	"push fs",      "pop fs",       "cpuid",        "bt %Ev,%Gv",
   "shld %Ev,%Gv,%Ib","shld %Ev,%Gv,cl",0,              0,
	"push gs",      "pop gs",       "rsm",          "bts %Ev,%Gv",
   "shrd %Ev,%Gv,%Ib","shrd %Ev,%Gv,cl",0,              "imul %Gv,%Ev",

/* B */
    "cmpxchg %Eb,%Gb","cmpxchg %Ev,%Gv","lss %Gv,%Mp",  "btr %Ev,%Gv",
    "lfs %Gv,%Mp",  "lgs %Gv,%Mp",  "movzx %Gv,%Eb","movzx %Gv,%Ew",
	0,		"ud",           "%g7 %Ev,%Ib",  "btc %Ev,%Gv",
	"bsf %Gv,%Ev",  "bsr %Gv,%Ev",  "movsx %Gv,%Eb","movsx %Gv,%Ew",

/* C */
	"xadd %Eb,%Gb", "xadd %Ev,%Gv", 0,              0,
	0,		0,		0,		"cmpxchg8B %Mq",
	"bswap eax",    "bswap ecx",    "bswap edx",    "bswap ebx",
	"bswap esp",    "bswap ebp",    "bswap esi",    "bswap edi",

/* D */
	0,		"psrlw %Pq,%Qd","psrld %Pq,%Qd","psrlq %Pq,%Qd",
	0,	       "pmullw %Pq,%Qd",0,              0,
    "psubusb %Pq,%Qq","psubusw %Pq,%Qq",0,              "pand %Pq,%Qq",
    "paddusb %Pq,%Qq","paddusw %Pq,%Qq",0,              "pandn %Pq,%Qq",
/* E */
	0,		"psraw %Pq,%Qd","psrad %Pq,%Qd",0,
	0,	       "pmulhw %Pq,%Qd",0,              0,
      "psubsb %Pq,%Qq","psubsw %Pq,%Qq",0,              "por %Pq,%Qq",
      "paddsb %Pq,%Qq","paddsw %Pq,%Qq",0,              "pxor %Pq,%Qq",
/* F */
	0,		"psllw %Pq,%Qd","pslld %Pq,%Qd","psllq %Pq,%Qd",
	0,	      "pmaddwd %Pq,%Qd",0,              0,
	"psubb %Pq,%Qq","psubw %Pq,%Qq","psubd %Pq,%Qq",0,
	"paddb %Pq,%Qq","paddw %Pq,%Qq","paddd %Pq,%Qq",0 };

char	*Groups[][8]={
/* 0 */ {
	"add",          "or",           "adc",          "sbb",
	"and",          "sub",          "xor",          "cmp"       },

/* 1 */ {
	"rol",          "ror",          "rcl",          "rcr",
	"shl",          "shr",          "shl",          "sar"       },

/* 2 */ {
	"test %Er,%Ir", "test %Er,%Ir", "not %Er",      "neg %Er",
	"mul %Er",      "imul %Er",     "div %Er",      "idiv %Er"  },

/* 3 */ {
	"inc %Eb",      "dec %Eb",      0,              0,
	0,		0,		0,		0	    },

/* 4 */ {
	"inc %Ev",      "dec %Ev",      "call %Ev",     "call %Ep",
	"jmp %Ev",      "jmp %Ep",      "push %Ev",     0           },

/* 5 */ {
	"sldt %Ew",     "str %Ew",      "lldt %Ew",     "ltr %Ew",
	"verr %Ew",     "verw %Ew",     0,              0           },

/* 6 */ {
	"sgdt %Ms",     "sidt %Ms",     "lgdt %Ms",     "lidt %Ms",
	"smsw %Ew",     0,              "lmsw %Ew",     "invlpg"    },

/* 7 */ {
	0,		0,		0,		0,
	"bt",           "bts",          "btr",          "btc"       },

/* 8 */ {
	0,		"cmpxch8B %Mq", 0,              0,
	0,		0,		0,		0	    },

/* 9 */ {
	0,		0,		"psrl",         0,
	"psra",         0,              "psll",         0
	},
	};

	/* These maps are directly copied from table.c (2asm) */
char	*f0[]	  = { 0, 0, 0, 0, 0, 0, 0, 0};
char	*fop_9[]  = { "*fxch st,%GF" };
char	*fop_10[] = { "fnop", 0, 0, 0, 0, 0, 0, 0 };
char	*fop_12[] = { "fchs", "fabs", 0, 0, "ftst", "fxam", 0, 0 };
char	*fop_13[] = { "fld1", "fldl2t", "fldl2e", "fldpi",
		      "fldlg2", "fldln2", "fldz", 0 };
char	*fop_14[] = { "f2xm1", "fyl2x", "fptan", "fpatan",
		      "fxtract", "fprem1", "fdecstp", "fincstp" };
char	*fop_15[] = { "fprem", "fyl2xp1", "fsqrt", "fsincos",
		      "frndint", "fscale", "fsin", "fcos" };
char	*fop_16[] = { "*fcmovb st,%GF" };
char	*fop_17[] = { "*fcmove st,%GF" };
char	*fop_18[] = { "*fcmovbe st,%GF" };
char	*fop_19[] = { "*fcmovu st,%GF" };
char	*fop_21[] = { 0, "fucompp", 0, 0, 0, 0, 0, 0 };
char	*fop_24[] = { "*fcmovnb st,%GF" };
char	*fop_25[] = { "*fcmovne st,%GF" };
char	*fop_26[] = { "*fcmovnbe st,%GF" };
char	*fop_27[] = { "*fcmovnu st,%GF" };
char	*fop_28[] = { 0, 0, "fclex", "finit", 0, 0, 0, 0 };
char	*fop_29[] = { "*fucomi st,%GF" };
char	*fop_30[] = { "*fcomi st,%GF" };
char	*fop_32[] = { "*fadd %GF,st" };
char	*fop_33[] = { "*fmul %GF,st" };
char	*fop_36[] = { "*fsubr %GF,st" };
char	*fop_37[] = { "*fsub %GF,st" };
char	*fop_38[] = { "*fdivr %GF,st" };
char	*fop_39[] = { "*fdiv %GF,st" };
char	*fop_40[] = { "*ffree %GF" };
char	*fop_42[] = { "*fst %GF" };
char	*fop_43[] = { "*fstp %GF" };
char	*fop_44[] = { "*fucom %GF" };
char	*fop_45[] = { "*fucomp %GF" };
char	*fop_48[] = { "*faddp %GF,st" };
char	*fop_49[] = { "*fmulp %GF,st" };
char	*fop_51[] = { 0, "fcompp", 0, 0, 0, 0, 0, 0 };
char	*fop_52[] = { "*fsubrp %GF,st" };
char	*fop_53[] = { "*fsubp %GF,st" };
char	*fop_54[] = { "*fdivrp %GF,st" };
char	*fop_55[] = { "*fdivp %GF,st" };
char	*fop_60[] = { "fstsw ax", 0, 0, 0, 0, 0, 0, 0 };
char	*fop_61[] = { "*fucmpip st,%GF" };
char	*fop_62[] = { "*fcomip st,%GF" };

char	**fspecial[] = { /* 0=use st(i), 0 in fop_* means undefined */
/* D8 */0, 0, 0, 0, 0, 0, 0, 0,
/* D9 */0, fop_9, fop_10, 0, fop_12, fop_13, fop_14, fop_15,
/* DA */fop_16,fop_17,fop_18,fop_19,f0,fop_21, f0, f0,
/* DB */fop_24,fop_25,fop_26,fop_27,fop_28,fop_29,fop_30,f0,
/* DC */fop_32, fop_33, f0, f0, fop_36, fop_37, fop_38, fop_39,
/* DD */fop_40, f0, fop_42, fop_43, fop_44, fop_45, f0, f0,
/* DE */fop_48, fop_49, f0, fop_51, fop_52, fop_53, fop_54, fop_55,
/* DF */f0, f0, f0, f0, fop_60, fop_61, fop_62, f0
};

char	*floatops[] = { /* assumed " %EF" at end of each.  mod != 3 only */
/*00*/	"fadd",         "fmul",         "fcom",         "fcomp",
	"fsub",         "fsubr",        "fdiv",         "fdivr",
/*08*/	"fld",          0,              "fst",          "fstp",
	"fldenv",       "fldcw",        "fstenv",       "fstcw",
/*16*/	"fiadd",        "fimul",        "ficomw",       "ficompw",
	"fisub",        "fisubr",       "fidiv",        "fidivr",
/*24*/	"fild",         0,              "fist",         "fistp",
	"frstor",       "fldt",         0,              "fstpt",
/*32*/	"faddq",        "fmulq",        "fcomq",        "fcompq",
	"fsubq",        "fsubrq",       "fdivq",        "fdivrq",
/*40*/	"fldq",         0,              "fstq",         "fstpq",
	0,	0,	"fsave",        "fstsw",
/*48*/	"fiaddw",       "fimulw",       "ficomw",       "ficompw",
	"fisubw",       "fisubrw",      "fidivw",       "fidivr",
/*56*/	"fildw",        0,              "fistw",        "fistpw",
	"fbldt",        "fildq",        "fbstpt",       "fistpq"
};
[ RETURN TO DIRECTORY ]