📄 print1.c
字号:
}
else
{
if (i_mod<0xC8) prxntf("fcmovnb st(0), st(%1d)", i_mod-0xC0);
else if (i_mod <0xD0) prxntf("fcmovne st(0), st(%1d)", i_mod-0xC8);
else if (i_mod <0xD8) prxntf("fcmovnbe st(0), st(%1d)",i_mod-0xD0);
else if (i_mod <0xE0) prxntf("fcmovnu st(0), st(%1d)", i_mod-0xD8);
else if (i_mod==0xE2) prxntf("fnclex");
else if (i_mod==0xE3) prxntf("fninit");
else if (i_mod <0xE8) fatalError=208;
else if (i_mod <0xF0) prxntf("fucomi st(0), st(%1d)", i_mod-0xE8);
else if (i_mod <0xF8) prxntf("fcomi st(0), st(%1d)", i_mod-0xF0);
}
break;
case 0xDC:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fadd "); prxntf("64real"); r_m_( 0); break;
case 1: prxntf("fmul "); prxntf("64real"); r_m_( 0); break;
case 2: prxntf("fcom "); prxntf("64real"); r_m_( 0); break;
case 3: prxntf("fcomp ");prxntf("64real"); r_m_( 0); break;
case 4: prxntf("fsub "); prxntf("64real"); r_m_( 0); break;
case 5: prxntf("fsubr ");prxntf("64real"); r_m_( 0); break;
case 6: prxntf("fdiv "); prxntf("64real"); r_m_( 0); break;
case 7: prxntf("fdivr ");prxntf("64real"); r_m_( 0); break;
default: fatalError=210;
}
}
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 <0xE0) fatalError=212;
else if (i_mod <0xE8) prxntf("fsubr st(0), st(%1d)",i_mod-0xE0);
else if (i_mod <0xF0) prxntf("fsub st(0), st(%1d)", i_mod-0xD8);
else if (i_mod <0xF8) prxntf("fdivr st(0), st(%1d)", i_mod-0xF0);
else prxntf("fdiv st(0), st(%1d)", i_mod-0xF8);
}
break;
case 0xDD:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fld "); prxntf("64real"); r_m_( 0);break;
case 2: prxntf("fst "); prxntf("64real"); r_m_( 0);break;
case 3: prxntf("fstp "); prxntf("64real"); r_m_( 0);break;
case 4: prxntf("frstor");prxntf("94/108byte");r_m_( 0);break;
case 6: prxntf("fnsave ");prxntf("94/108byte");r_m_( 0);break;
case 7: prxntf("fnstsw ");prxntf("2byte"); r_m_( 0); break;
default: fatalError=214;
}
}
else
{
if (i_mod<0xC8) prxntf("ffree st(%1d)", i_mod-0xC0);
else if (i_mod <0xD0) fatalError=216;
else if (i_mod <0xD8) prxntf("fst st(%1d)", i_mod-0xD0);
else if (i_mod <0xE0) prxntf("fstp st(%1d)", i_mod-0xD8);
else if (i_mod==0xE1) prxntf("fucom");
else if (i_mod <0xE8) prxntf("fucom st(%1d)", i_mod-0xE0);
else if (i_mod==0xE9) prxntf("fucomp");
else if (i_mod <0xF0) prxntf("fucomp st(%1d)",i_mod-0xE8);
else fatalError=218;
}
break;
case 0xDE:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fiadd "); prxntf("16int");r_m_( 0); break;
case 1: prxntf("fimul "); prxntf("16int");r_m_( 0); break;
case 2: prxntf("ficom "); prxntf("16int");r_m_( 0); break;
case 3: prxntf("ficomp "); prxntf("16int");r_m_( 0); break;
case 4: prxntf("fisub "); prxntf("16int");r_m_( 0); break;
case 5: prxntf("fisubr "); prxntf("16int");r_m_( 0); break;
case 6: prxntf("fidiv "); prxntf("16int");r_m_( 0); break;
case 7: prxntf("fidivr "); prxntf("16int");r_m_( 0); break;
default: fatalError=220;
}
}
else
{
if(i_mod==0xC1) prxntf("faddp");
else if (i_mod <0xC8) prxntf("faddp st(%1d), st(0)", i_mod-0xC0);
else if (i_mod==0xC9) prxntf("fmulp");
else if (i_mod <0xD0) prxntf("fmulp st(%1d), st(0)", i_mod-0xC8);
else if (i_mod==0xD9) prxntf("fcompp");
else if (i_mod <0xE0) fatalError=222;
else if (i_mod==0xE1) prxntf("fsubrp");
else if (i_mod <0xE8) prxntf("fsubrp st(%1d), st(0)", i_mod-0xE0);
else if (i_mod==0xE9) prxntf("fsubp");
else if (i_mod <0xF0) prxntf("fsubp st(%1d), st(0)", i_mod-0xE8);
else if (i_mod==0xF1) prxntf("fdivrp");
else if (i_mod <0xF8) prxntf("fdivrp st(%1d), st(0)", i_mod-0xF0);
else if (i_mod==0xF9) prxntf("fdivp");
else prxntf("fdivp st(%1d), st(0)", i_mod-0xF8);
}
break;
case 0xDF:
if (i_mod<0xC0)
{
switch(regTable[i_mod])
{
case 0: prxntf("fild "); prxntf("16int");r_m_( 0); break;
case 2: prxntf("fist "); prxntf("16int");r_m_( 0); break;
case 3: prxntf("fistp "); prxntf("16int");r_m_( 0); break;
case 4: prxntf("fbld "); prxntf("80bcd");r_m_( 0); break;
case 5: prxntf("fild "); prxntf("64int");r_m_( 0); break;
case 6: prxntf("fbstp "); prxntf("80bcd");r_m_( 0); break;
case 7: prxntf("fistp "); prxntf("64int");r_m_( 0); break;
default: fatalError=224;
}
}
else
{
if(i_mod <0xDF) fatalError=226;
else if (i_mod==0xE0) prxntf("fnstsw ax");
else if (i_mod <0xE8) fatalError=228;
else if (i_mod <0xF0) prxntf("fucomip st(0), st(%1d)", i_mod-0xE8);
else if (i_mod <0xF8) prxntf("fcomip st(0), st(%1d)", i_mod-0xF0);
else fatalError=230;
}
break;
default: fatalError=232;
}
return 0;
} /* print12case() */
int print13case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
switch(regTable[i_mod])
{
case 0: prxntf("inc "); r_m_(rr); break;
case 1: prxntf("dec "); r_m_(rr); break;
case 2: prxntf("call ");
if (nextMode)
{
ref = r_m_(rr);
class=13;
if (i_mod>=0xD0)
{
reg=rmTable[i_mod];
if (temppos[reg]+128>cur_position)
ref=tempref[reg]; temppos[reg]=cur_position;
}
}
else
if (!printName(cur_position)) r_m_(rr);
break;
case 3: prxntf("call "); ref = m16_32(); class=17;
break;
case 4: prxntf("jmp ");
if (nextMode)
{
ref = r_m_(32);
if (gotJmpRef)
{ class=128+5; gotJmpRef=0; }
else class=5;
// it is OK to mark anchor...because it will not be erased easily??
lastAnchor=cur_position+i_col-1;
if (nextMode)
*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
//leaveFlag=cur_position+i_col;
}
else
if (!printName(cur_position)) r_m_(rr);
break;
case 5: prxntf("jmp "); ref = m16_32(); class = 9;
break;
case 6: prxntf("push "); ref = r_m_(rr);
class = 513;
// well I really don't know it is reasonably safe to do this.
// I think when we push some (possible) address references into stack
// there is strong reason to do so. that's why i am doing this. i guess...
break;
default: fatalError=234;
}
return 0;
}
int print14case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
if (i_opcode==0xF6)
{
switch(regTable[i_mod])
{
case 0: prxntf("test "); r_m_( 8); prxntf(", "); print_i_byte(); break;
case 2: prxntf("not "); r_m_( 8); break;
case 3: prxntf("neg "); r_m_( 8); break;
case 4: prxntf("mul "); r_m_( 8); break;
case 5: prxntf("imul "); r_m_( 8); break;
case 6: prxntf("div "); r_m_( 8); break;
case 7: prxntf("idiv "); r_m_( 8); break;
default: fatalError=303;
}
}
else if (i_opcode==0xF7)
{
switch(regTable[i_mod])
{
case 0: prxntf("test "); r_m_(rr); prxntf(", "); print_i_dword(); break;
case 2: prxntf("not "); r_m_(rr); break;
case 3: prxntf("neg "); r_m_(rr); break;
case 4: prxntf("mul "); r_m_(rr); break;
case 5: prxntf("imul "); r_m_(rr); break;
case 6: prxntf("div "); r_m_(rr); break;
case 7: prxntf("idiv "); r_m_(rr); break;
default: fatalError=00305;
}
}
else fatalError=307;
return 0;
}
int print15case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
if (i_opcode==0xD9)
{
if (regTable[i_mod]==6)
{
prxntf("fstenv 14/28byte"); r_m_(rr);
}
else if (regTable[i_mod]==7)
{
prxntf("fstcw 2byte"); r_m_(rr);
}
else fatalError=309;
}
else if (i_opcode==0xDB)
{
if (i_mod==0xE2) prxntf("fclex ");
else if (i_mod==0xE3) prxntf("finit ");
else fatalError=311;
}
else if (i_opcode==0xDD)
{
if (regTable[i_mod]==6)
{
prxntf("fsave 94/108byte"); r_m_(rr);
}
else if (regTable[i_mod]==7)
{
prxntf("fstsw 2byte"); r_m_(rr);
}
else fatalError=313;
}
else if (i_opcode==0xDF)
{
if (i_mod==0xE0) prxntf("fstsw ax ");
else fatalError=315;
}
else if (i_opcode==0x9B) prxntf("wait");
else fatalError=317;
return 0;
}
int print16case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
if (prefixStack[i_psp-1]==0xF2)
{
switch(i_opcode)
{
case 0xA6: prxntf("repne cmpsb"); break;
case 0xA7: if (operandOveride) prxntf("repne cmpsw");
else prxntf("repne cmpsd"); break;
case 0xAE: prxntf("repne scasb"); break;
case 0xAF: if (operandOveride) prxntf("repne scasw");
else prxntf("repne scasd"); break;
default: fatalError=319;
}
}
else if (prefixStack[i_psp-1]==0xF3)
{
switch(i_opcode)
{
case 0x6C: prxntf("rep ins byte");
r_m_( 8);prxntf(", port[dx]");
break;
case 0x6D: if (operandOveride) prxntf("rep ins word");
else prxntf("rep ins dword");
r_m_(rr);prxntf(", port[dx]");
break;
case 0x6E: prxntf("rep outs port[dx], byte");
r_m_( 8);
break;
case 0x6F: if (operandOveride) prxntf("rep outs port[dx], word");
else prxntf("rep outs port[dx], dword");
r_m_(rr);
break;
case 0xA4: prxntf("rep movsb");
break;
case 0xA5: if (operandOveride) prxntf("rep movsw");
else prxntf("rep movsd");
break;
case 0xA6: prxntf("repe cmpsb");
break;
case 0xA7: if (operandOveride) prxntf("repe cmpsw");
else prxntf("repe cmpsd");
break;
case 0xAA: prxntf("rep stosb");
break;
case 0xAB: if (operandOveride) prxntf("rep stosw");
else prxntf("rep stosd");
break;
case 0xAC: prxntf("rep lods al");
break;
case 0xAD: if (operandOveride) prxntf("rep lods ax");
else prxntf("rep lods eax");
break;
case 0xAE: prxntf("repe scasb");
break;
case 0xAF: if (operandOveride) prxntf("repe scasw");
else prxntf("repe scasd");
break;
default: fatalError=321;
}
}
else fatalError=323;
return 0;
}
/* *************************************************************** */
/* *************************************************************** */
/* 2 byte opcode printing starts here! */
/* *************************************************************** */
/* *************************************************************** */
int print20case()
{
switch(i_opcode)
{
case 0x06: prxntf("clts"); break;
case 0x08: prxntf("invd"); break;
case 0x09: prxntf("wbinvd"); break;
case 0x0B: prxntf("ud2"); break;
case 0x30: prxntf("wrmsr"); break;
case 0x31: prxntf("rdtsc"); break;
case 0x32: prxntf("rdmsr"); break;
case 0x33: prxntf("rdpmc"); break;
case 0x77: prxntf("emms"); break;
case 0xA0: prxntf("push fs"); break;
case 0xA1: prxntf("pop fs"); break;
case 0xA2: prxntf("cpuid"); break;
case 0xA8: prxntf("push gs"); break;
case 0xA9: prxntf("pop gs"); break;
case 0xAA: prxntf("rsm"); break;
case 0xC8: prxntf("bswap eax"); break;
case 0xC9: prxntf("bswap ecx"); break;
case 0xCA: prxntf("bswap edx"); break;
case 0xCB: prxntf("bswap ebx"); break;
case 0xCC: prxntf("bswap esp"); break;
case 0xCD: prxntf("bswap ebp"); break;
case 0xCE: prxntf("bswap esi"); break;
case 0xCF: prxntf("bswap edi"); break;
default: fatalError=325;
}
return 0;
}
int print21case()
{
switch(i_opcode)
{
case 0x80: prxntf("jo "); break;
case 0x81: prxntf("jno "); break;
case 0x82: prxntf("jb "); break;
case 0x83: prxntf("jae "); break;
case 0x84: prxntf("je "); break;
case 0x85: prxntf("jne "); break;
case 0x86: prxntf("jbe "); break;
case 0x87: prxntf("ja "); break;
case 0x88: prxntf("js "); break;
case 0x89: prxntf("jns "); break;
case 0x8A: prxntf("jpe "); break;
case 0x8B: prxntf("jpo "); break;
case 0x8C: prxntf("jl "); break;
case 0x8D: prxntf("jge "); break;
case 0x8E: prxntf("jle "); break;
case 0x8F: prxntf("jg "); break;
default: fatalError=327;
}
ref = print_rel32(); class = 4;
return 0;
}
int print22case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
switch(i_opcode)
{
case 0x02: prxntf("lar "); r___(rr);prxntf(", ");r_m_(rr);break;
case 0x03: prxntf("lsl "); r___(rr);prxntf(", ");r_m_(rr);break;
case 0x20: prxntf("mov "); r___(rr);prxntf(", cr%1d", rmTable[i_mod]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -