📄 print1.c
字号:
{
int rr;
if (operandOveride) rr=16; else rr=32;
switch(i_opcode)
{
case 0x00: prxntf("add "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x01: prxntf("add "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x02: prxntf("add "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x03: prxntf("add "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x08: prxntf("or "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x09: prxntf("or "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x0A: prxntf("or "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x0B: prxntf("or "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x10: prxntf("adc "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x11: prxntf("adc "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x12: prxntf("adc "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x13: prxntf("adc "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x18: prxntf("sbb "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x19: prxntf("sbb "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x1A: prxntf("sbb "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x1B: prxntf("sbb "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x20: prxntf("and "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x21: prxntf("and "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x22: prxntf("and "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x23: prxntf("and "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x28: prxntf("sub "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x29: prxntf("sub "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x2A: prxntf("sub "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x2B: prxntf("sub "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x30: prxntf("xor "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x31: prxntf("xor "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x32: prxntf("xor "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x33: prxntf("xor "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x38: prxntf("cmp "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x39: prxntf("cmp "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x3A: prxntf("cmp "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x3B: prxntf("cmp "); r___(rr); prxntf(", "); r_m_(rr); break;
case 0x62: prxntf("bound "); r___(rr); prxntf(", "); m32_32(); break;
case 0x63: prxntf("arpl "); r_m_(16); prxntf(", "); r___(16); break;
case 0x84: prxntf("test "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x85: prxntf("test "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x86: prxntf("xchg "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x87: prxntf("xchg "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x88: prxntf("mov "); r_m_( 8); prxntf(", "); r___( 8); break;
case 0x89: prxntf("mov "); r_m_(rr); prxntf(", "); r___(rr); break;
case 0x8A: prxntf("mov "); r___( 8); prxntf(", "); r_m_( 8); break;
case 0x8B: prxntf("mov "); r___(rr); prxntf(", "); ref=r_m_(rr);
reg=regTable[i_mod]; tempref[reg]=ref; temppos[reg]=cur_position;
break;
case 0x8C: prxntf("mov "); r_m_(rr); prxntf(", "); Sreg__(); break;
case 0x8D: prxntf("lea "); r___(rr); prxntf(", "); m_____(); break;
case 0x8E: prxntf("mov "); Sreg__(); prxntf(", "); r_m_(16); break;
case 0xC4: prxntf("les es:"); r___(rr); prxntf(", "); m16_32(); break;
case 0xC5: prxntf("lds es:"); r___(rr); prxntf(", "); m16_32(); break;
default: fatalError=113;return -1;
}
return 0;
}
int print7case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
prxntf("imul "); r___(rr);
if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
{ prxntf(", "); r_m_(rr); }
prxntf(", ");
print_i_byte();
return 0;
}
int print8case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
prxntf("imul "); r___(rr);
if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
{ prxntf(", "); r_m_(rr); }
prxntf(", ");
print_i_dword();
return 0;
}
int print9case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
specifierFlag = my_ON;
switch(i_opcode)
{
case 0x8F:
if (regTable[i_mod]>0)
{
fatalError=115;
specifierFlag = my_OFF;
return -1;
}
prxntf("pop "); r_m_(rr);
break;
case 0xD0:
switch(regTable[i_mod])
{
case 0: prxntf("rol "); r_m_( 8); prxntf(", 1"); break;
case 1: prxntf("ror "); r_m_( 8); prxntf(", 1"); break;
case 2: prxntf("rcl "); r_m_( 8); prxntf(", 1"); break;
case 3: prxntf("rcr "); r_m_( 8); prxntf(", 1"); break;
case 4: prxntf("shl "); r_m_( 8); prxntf(", 1"); break;
case 5: prxntf("shr "); r_m_( 8); prxntf(", 1"); break;
case 7: prxntf("sar "); r_m_( 8); prxntf(", 1"); break;
default: fatalError=117;
}
break;
case 0xD1:
switch(regTable[i_mod])
{
case 0: prxntf("rol "); r_m_(rr); prxntf(", 1"); break;
case 1: prxntf("ror "); r_m_(rr); prxntf(", 1"); break;
case 2: prxntf("rcl "); r_m_(rr); prxntf(", 1"); break;
case 3: prxntf("rcr "); r_m_(rr); prxntf(", 1"); break;
case 4: prxntf("shl "); r_m_(rr); prxntf(", 1"); break;
case 5: prxntf("shr "); r_m_(rr); prxntf(", 1"); break;
case 7: prxntf("sar "); r_m_(rr); prxntf(", 1"); break;
default: fatalError=118;
}
break;
case 0xD2:
switch(regTable[i_mod])
{
case 0: prxntf("rol "); r_m_( 8); prxntf(", cl"); break;
case 1: prxntf("ror "); r_m_( 8); prxntf(", cl"); break;
case 2: prxntf("rcl "); r_m_( 8); prxntf(", cl"); break;
case 3: prxntf("rcr "); r_m_( 8); prxntf(", cl"); break;
case 4: prxntf("shl "); r_m_( 8); prxntf(", cl"); break;
case 5: prxntf("shr "); r_m_( 8); prxntf(", cl"); break;
case 7: prxntf("sar "); r_m_( 8); prxntf(", cl"); break;
default: fatalError=119;
}
break;
case 0xD3:
switch(regTable[i_mod])
{
case 0: prxntf("rol "); r_m_(rr); prxntf(", cl"); break;
case 1: prxntf("ror "); r_m_(rr); prxntf(", cl"); break;
case 2: prxntf("rcl "); r_m_(rr); prxntf(", cl"); break;
case 3: prxntf("rcr "); r_m_(rr); prxntf(", cl"); break;
case 4: prxntf("shl "); r_m_(rr); prxntf(", cl"); break;
case 5: prxntf("shr "); r_m_(rr); prxntf(", cl"); break;
case 7: prxntf("sar "); r_m_(rr); prxntf(", cl"); break;
default: fatalError=121;
}
break;
case 0xFE:
switch(regTable[i_mod])
{
case 0: prxntf("inc "); r_m_( 8); break;
case 1: prxntf("dec "); r_m_( 8); break;
default: fatalError=123;
}
break;
default: fatalError=125;
}
specifierFlag=my_OFF;
return 0;
}
int print10case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
switch(i_opcode)
{
case 0x80:
switch(regTable[i_mod])
{
case 0: prxntf("add "); r_m_( 8); prxntf(", "); break;
case 1: prxntf("or "); r_m_( 8); prxntf(", "); break;
case 2: prxntf("adc "); r_m_( 8); prxntf(", "); break;
case 3: prxntf("sbb "); r_m_( 8); prxntf(", "); break;
case 4: prxntf("and "); r_m_( 8); prxntf(", "); break;
case 5: prxntf("sub "); r_m_( 8); prxntf(", "); break;
case 6: prxntf("xor "); r_m_( 8); prxntf(", "); break;
case 7: prxntf("cmp "); r_m_( 8); prxntf(", "); break;
default: fatalError=127;
}
print_i_byte();
break;
case 0x83:
switch(regTable[i_mod])
{
case 0: prxntf("add "); r_m_(rr); prxntf(", "); break;
case 1: prxntf("or "); r_m_(rr); prxntf(", "); break;
case 2: prxntf("adc "); r_m_(rr); prxntf(", "); break;
case 3: prxntf("sbb "); r_m_(rr); prxntf(", "); break;
case 4: prxntf("and "); r_m_(rr); prxntf(", "); break;
case 5: prxntf("sub "); r_m_(rr); prxntf(", "); break;
case 6: prxntf("xor "); r_m_(rr); prxntf(", "); break;
case 7: prxntf("cmp "); r_m_(rr); prxntf(", "); break;
default: fatalError=129;
}
print_i_byte32();
break;
case 0xC0:
switch(regTable[i_mod])
{
case 0: prxntf("rol "); r_m_( 8); prxntf(", "); break;
case 1: prxntf("ror "); r_m_( 8); prxntf(", "); break;
case 2: prxntf("rcl "); r_m_( 8); prxntf(", "); break;
case 3: prxntf("rcr "); r_m_( 8); prxntf(", "); break;
case 4: prxntf("shl "); r_m_( 8); prxntf(", "); break;
case 5: prxntf("shr "); r_m_( 8); prxntf(", "); break;
case 7: prxntf("sar "); r_m_( 8); prxntf(", "); break;
default: fatalError=131;
}
print_i_byte();
break;
case 0xC1:
switch(regTable[i_mod])
{
case 0: prxntf("rol "); r_m_(rr); prxntf(", "); break;
case 1: prxntf("ror "); r_m_(rr); prxntf(", "); break;
case 2: prxntf("rcl "); r_m_(rr); prxntf(", "); break;
case 3: prxntf("rcr "); r_m_(rr); prxntf(", "); break;
case 4: prxntf("shl "); r_m_(rr); prxntf(", "); break;
case 5: prxntf("shr "); r_m_(rr); prxntf(", "); break;
case 7: prxntf("sar "); r_m_(rr); prxntf(", "); break;
default: fatalError=133;
}
print_i_byte();
break;
case 0xC6:
if (regTable[i_mod]==0)
{
prxntf("mov "); r_m_( 8);
prxntf(", "); print_i_byte();
}
else fatalError=135;
break;
default: fatalError=137;
}
return 0;
}
int print11case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
if (i_opcode==0xC7)
{
if (regTable[i_mod]>0)
{
fatalError=139;
return -1;
}
prxntf("mov "); r_m_(rr); prxntf(", ");
ref=print_i_dword();
class=1024;
return 0;
}
else /* is should be 0x81 otherwise i*am*in*big*trouble */
{
switch(regTable[i_mod])
{
case 0: prxntf("add "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 1: prxntf("or "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 2: prxntf("adc "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 3: prxntf("sbb "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 4: prxntf("and "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 5: prxntf("sub "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 6: prxntf("xor "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 7: prxntf("cmp "); r_m_(rr); prxntf(", "); print_i_dword(); break;
default: fatalError=141;
}
}
return 0;
}
int print12case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
switch(i_opcode)
{
case 0xD8:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fadd "); prxntf("32real"); r_m_( 0); break;
case 1: prxntf("fmul "); prxntf("32real"); r_m_( 0); break;
case 2: prxntf("fcom "); prxntf("32real"); r_m_( 0); break;
case 3: prxntf("fcomp "); prxntf("32real"); r_m_( 0); break;
case 4: prxntf("fsub "); prxntf("32real"); r_m_( 0); break;
case 5: prxntf("fsubr "); prxntf("32real"); r_m_( 0); break;
case 6: prxntf("fdiv "); prxntf("32real"); r_m_( 0); break;
case 7: prxntf("fdivr "); prxntf("32real"); r_m_( 0); break;
default: fatalError=143;
}
}
else
{
if (i_mod<0xC8) prxntf("fadd st(0), st(%1d)", i_mod-0xC0);
else if (i_mod <0xD0) prxntf("fmul st(0), st(%1d)", i_mod-0xC8);
else if (i_mod==0xD1) prxntf("fcom");
else if (i_mod <0xD8) prxntf("fcom st(0), st(%1d)", i_mod-0xD0);
else if (i_mod==0xD9) prxntf("fcomp");
else if (i_mod <0xE0) prxntf("fcomp st(0), st(%1d)", i_mod-0xD8);
else if (i_mod <0xE8) prxntf("fsub st(0), st(%1d)", i_mod-0xE0);
else if (i_mod <0xF0) prxntf("fsubr st(0), st(%1d)", i_mod-0xE8);
else if (i_mod <0xF8) prxntf("fdiv st(0), st(%1d)", i_mod-0xF0);
else prxntf("fdivr st(0), st(%1d)", i_mod-0xF8);
}
break;
case 0xD9:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fld "); prxntf("32real"); r_m_( 0); break;
case 2: prxntf("fst "); prxntf("32real"); r_m_( 0); break;
case 3: prxntf("fstp "); prxntf("32real"); r_m_( 0); break;
case 4: prxntf("fldenv ");prxntf("14/28byte");r_m_( 0);break;
case 5: prxntf("fldcw "); prxntf("2byte"); r_m_( 0); break;
case 6: prxntf("fnstenv ");prxntf("14/28byte");r_m_( 0);break;
case 7: prxntf("fnstcw ");prxntf("2byte"); r_m_( 0); break;
default: fatalError=145;
}
}
else
{
if (i_mod<0xC8) prxntf("fld st(%1d)", i_mod-0xC0);
else if (i_mod==0xC9) prxntf("fxch");
else if (i_mod <0xD0) prxntf("fxch st(%1d)", i_mod-0xC8);
else
{
switch(i_mod)
{
case 0xD0: prxntf("fnop"); break;
case 0xE0: prxntf("fchs"); break;
case 0xE1: prxntf("fabs"); break;
case 0xE4: prxntf("ftst"); break;
case 0xE5: prxntf("fxam"); break;
case 0xE8: prxntf("fld1"); break;
case 0xE9: prxntf("fldl2t"); break;
case 0xEA: prxntf("fldl2e"); break;
case 0xEB: prxntf("fldpi"); break;
case 0xEC: prxntf("fldlg2"); break;
case 0xED: prxntf("fldln2"); break;
case 0xEE: prxntf("fldz"); break;
case 0xF0: prxntf("f2xm1"); break;
case 0xF1: prxntf("fyl2x"); break;
case 0xF2: prxntf("fptan"); break;
case 0xF3: prxntf("fpatan"); break;
case 0xF4: prxntf("fxtract"); break;
case 0xF5: prxntf("fprem1"); break;
case 0xF6: prxntf("fdecstp"); break;
case 0xF7: prxntf("fincstp"); break;
case 0xF8: prxntf("fprem"); break;
case 0xF9: prxntf("fyl2xp1"); break;
case 0xFA: prxntf("fsqrt"); break;
case 0xFB: prxntf("fsincos"); break;
case 0xFC: prxntf("frndint"); break;
case 0xFD: prxntf("fscale"); break;
case 0xFE: prxntf("fsin"); break;
case 0xFF: prxntf("fcos"); break;
default: fatalError=202;
}
}
}
break;
case 0xDA:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fiadd "); r_m_(rr); break;
case 1: prxntf("fimul "); r_m_(rr); break;
case 2: prxntf("ficom "); r_m_(rr); break;
case 3: prxntf("ficomp "); r_m_(rr); break;
case 4: prxntf("fisub "); r_m_(rr); break;
case 5: prxntf("fisubr "); r_m_(rr); break;
case 6: prxntf("fidiv "); r_m_(rr); break;
case 7: prxntf("fidivr "); r_m_(rr); break;
default: fatalError=204;
}
}
else
{
if (i_mod<0xC8) prxntf("fcmovb st(0), st(%1d)", i_mod-0xC0);
else if (i_mod <0xD0) prxntf("fcmove st(0), st(%1d)", i_mod-0xC8);
else if (i_mod <0xD8) prxntf("fcmovbe st(0), st(%1d)",i_mod-0xD0);
else if (i_mod <0xE0) prxntf("fcmovu st(0), st(%1d)", i_mod-0xD8);
else if (i_mod==0xE9) prxntf("fucompp");
}
break;
case 0xDB:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fild "); r_m_(rr); break;
case 2: prxntf("fist "); r_m_(rr); break;
case 3: prxntf("fistp "); r_m_(rr); break;
case 5: prxntf("fld "); prxntf("80real"); r_m_( 0); break;
case 7: prxntf("fstp "); prxntf("80real"); r_m_( 0); break;
default: fatalError=206;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -