📄 dsmlib.c
字号:
prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [2], 0, prtAddress); break; case 1: /* word */ printf ("#%#x,", binInst [1]); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [2], 0, prtAddress); break; case 2: /* long */ printf ("#%#x%04x,", binInst [1], binInst [2]); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [3], 0, prtAddress); break; } printf ("\n"); break; case itMoveB: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 1, prtAddress); printf (","); frstArg = modeNwords ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, 1, &binInst [1]); prEffAddr ((binInst [0] & 0x01c0) >> 6, (binInst [0] & 0x0e00) >> 9, &binInst [1 + frstArg], 1, prtAddress); printf ("\n"); break; case itMoveW: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 2, prtAddress); printf (","); frstArg = modeNwords ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, 1, &binInst [1]); prEffAddr ((binInst [0] & 0x01c0) >> 6, (binInst [0] & 0x0e00) >> 9, &binInst [1 + frstArg], 2, prtAddress); printf ("\n"); break; case itMoveL: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 4, prtAddress); printf (","); frstArg = modeNwords ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, 2, &binInst [1]); prEffAddr ((binInst [0] & 0x01c0) >> 6, (binInst [0] & 0x0e00) >> 9, &binInst [1 + frstArg], 4, prtAddress); printf ("\n"); break; case itImmCCR: printf ("#%#x,CCR\n", binInst [1] & 0xff); break; case itImmTSR: printf ("#%#x,SR\n", binInst [1]); break; case itMoveCCR: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 2, prtAddress); printf (",CCR\n"); break; case itMoveTSR: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 2, prtAddress); printf (",SR\n"); break; case itMoveFSR: printf ("SR,"); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 0, prtAddress); printf ("\n"); break; case itMoveUSP: printf (((binInst [0] & 0x8) == 0) ? "A%x,USP\n" : "USP,A%x\n", binInst [0] & 0x07); break; case itMovep: if ((binInst [0] & 0x0040) == 0) printf ("%x(A%x),D%x\n", binInst [1], binInst [0] & 0x07, (binInst [0] & 0x0c00) >> 9); else printf ("D%x,%x(A%x)\n", (binInst [0] & 0x0c00) >> 9, binInst [1], binInst [0] & 0x07); break; case itMovem: if ((binInst [0] & 0x0400) == 0) { prMovemRegs (binInst [1], (binInst [0] & 0x38) >> 3); printf (","); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [2], 0, prtAddress); printf ("\n"); } else { prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [2], 0, prtAddress); printf (","); prMovemRegs (binInst [1], (binInst [0] & 0x38) >> 3); printf ("\n"); } break; case itMoveq: printf ("#%#x,D%x\n", binInst [0] & 0x00ff, (binInst [0] & 0x0e00) >> 9); break; case itNbcd: case itNegx: case itCpSave: case itScc: case itMemShift: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 0, prtAddress); printf ("\n"); break; case itCpGen: case itCpScc: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [2], 0, prtAddress); printf ("\n"); break; case itMoveA: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], ((binInst [0] & 0x1000) == 0) ? 4 : 2, prtAddress); printf (",A%x\n", (binInst [0] & 0x0e00) >> 9); break; case itAdda: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], ((binInst [0] & 0x0100) == 0) ? 2 : 4, prtAddress); printf (",A%x\n", (binInst [0] & 0x0e00) >> 9); break; case itCmpm: printf ("(A%x)+,(A%x)+\n", (binInst [0] & 0x0007), (binInst [0] & 0x0e00) >> 9); break; case itOr: switch ((binInst [0] & 0x01c0) >> 6) /* op-mode */ { case 0: /* byte, to D reg */ prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 1, prtAddress); printf (",D%x\n", (binInst [0] & 0x0e00) >> 9); break; case 1: /* word to D reg */ prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 2, prtAddress); printf (",D%x\n", (binInst [0] & 0x0e00) >> 9); break; case 2: /* long, to D reg */ prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 4, prtAddress); printf (",D%x\n", (binInst [0] & 0x0e00) >> 9); break; case 4: /* byte, to eff address */ case 5: /* word, to eff address */ case 6: /* long, to eff address */ printf ("D%x,", (binInst [0] & 0x0e00) >> 9); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 0, prtAddress); printf ("\n"); break; } break; case itQuick: /* If the data field is 0, it really means 8 */ if ((binInst [0] & 0x0e00) == 0) printf ("#0x8,"); else printf ("#%#x,", (binInst [0] & 0x0e00) >> 9); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 0, prtAddress); printf ("\n"); break; case itBcd: if ((binInst [0] & 0x0004) == 0) printf ("D%x,D%x\n", (binInst [0] & 0x0e00) >> 9, binInst [0] & 0x0007); else printf ("-(A%x),-(A%x)\n", (binInst [0] & 0x0e00) >> 9, binInst [0] & 0x0007); break; case itRegShift: if ((binInst [0] & 0x0e20) == 0) printf ("#0x8,"); else if ((binInst [0] & 0x0020) == 0) printf ("#%#x,", (binInst [0] & 0x0e00) >> 9); else printf ("D%x,", (binInst [0] & 0x0e00) >> 9); printf ("D%x\n", binInst [0] & 0x07); break; case itTrapcc: if ((binInst [0] & 7) == 2) printf ("#%#x", binInst [1]); else if ((binInst [0] & 7) == 3) printf ("#%#x%04x", binInst [1], binInst [2]); printf ("\n"); break; case itStop: printf ("%#x\n", binInst [1]); break; case itSwap: case itExt: printf ("D%x\n", binInst [0] & 0x07); break; case itUnlk: printf ("A%x\n", binInst [0] & 0x07); break; case itLink: printf ("A%x,#%#x\n", binInst [0] & 0x07, binInst [1]); break; case itLinkL: printf ("A%x,#%#x%04x\n", binInst [0] & 7, binInst [1], binInst [2]); break; case itRtm: printf ((binInst [0] & 8) ? "A%x\n" : "D%x\n", binInst [0] & 7); break; case itTrap: printf ("#%#x\n", binInst [0] & 0x0f); break; case itBkpt: printf ("#%#x\n", binInst [0] & 7); break; case itX: printf (((binInst [0] & 0x08) == 0) ? "D%x,D%x\n" : "-(A%x),-(A%x)\n", binInst [0] & 0x07, (binInst [0] & 0x0e00) >> 9); break; case itPack: printf (((binInst [0] & 0x08) == 0) ? "D%x,D%x," : "-(A%x),-(A%x),", binInst [0] & 0x07, (binInst [0] & 0x0e00) >> 9); printf ("#%#x\n", binInst [1]); break; case itDb: printf ("D%x,", binInst [0] & 0x07); (*prtAddress) (address + 2 + (short) binInst [1]); printf ("\n"); break; case itRTD: printf ("#%#x\n", binInst [1]); break; case itBfchg: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7, &binInst [2], 0, prtAddress); prOffWid ((binInst [1] & 0x0800) >> 11, (binInst [1] & 0x07c0) >> 6, (binInst [1] & 0x20) >> 5, binInst [1] & 0x1f); printf ("\n"); break; case itBfext: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7, &binInst [2], 0, prtAddress); prOffWid ((binInst [1] & 0x0800) >> 11, (binInst [1] & 0x07c0) >> 6, (binInst [1] & 0x20) >> 5, binInst [1] & 0x1f); printf (",D%x\n", (binInst [1] & 0x7000) >> 12); break; case itBfins: printf ("D%x,", (binInst [1] & 0x7000) >> 12); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7, &binInst [2], 0, prtAddress); prOffWid ((binInst [1] & 0x0800) >> 11, (binInst [1] & 0x07c0) >> 6, (binInst [1] & 0x20) >> 5, binInst [1] & 0x1f); printf ("\n"); break; case itDivL: prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7, &binInst [2], 4, prtAddress); printf (","); if (binInst [1] & 0x0400 || ((binInst [1] & 0x0007) != ((binInst [1] & 0x7000) >> 12))) { printf ("D%x:", binInst [1] & 7); } printf ("D%x\n", (binInst [1] & 0x7000) >> 12); break; case itCas: printf ("D%x,D%x,", binInst [1] & 7, (binInst [1] & 0x01c0) >> 6); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7, &binInst [2], 0, prtAddress); printf ("\n"); break; case itCas2: printf ("D%x:D%x,D%x:D%x,", binInst [1] & 7, binInst [2] & 7, (binInst [1] & 0x01c0) >> 6, (binInst [2] & 0x01c0) >> 6 ); printf (binInst [1] & 0x8000 ? "(A%x):" : "(D%x):", (binInst [1] & 0x7000) >> 12); printf (binInst [2] & 0x8000 ? "(A%x)\n" : "(D%x)\n", (binInst [2] & 0x7000) >> 12); break; case itMoves: if ((binInst[1] & 0x0800) == 0) { /* from <ea> to general reg */ prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [2], 0, prtAddress); if ((binInst[1] & 0x8000) == 0) printf (",D%x\n",(binInst[1] & 0x7000) >> 12); else printf (",A%x\n",(binInst[1] & 0x7000) >> 12); } else { /* from general reg to <ea> */ if ( (binInst[1] & 0x8000) == 0) printf ("D%x, ",(binInst[1] & 0x7000) >> 12); else printf ("A%x, ",(binInst[1] & 0x7000) >> 12); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [2], 0, prtAddress); printf ("\n"); } break; case itMovec: if ((binInst[0] & 1) == 0) { /* control reg to general reg */ prContReg (binInst[1] & 0x0fff); if ((binInst[1] & 0x8000) == 0) printf (",D%x\n",(binInst[1] & 0x7000) >> 12); else printf (",A%x\n",(binInst[1] & 0x7000) >> 12); } else { /* general reg to control reg */ if ((binInst[1] & 0x8000) == 0) printf ("D%x,",(binInst[1] & 0x7000) >> 12); else printf ("A%x,",(binInst[1] & 0x7000) >> 12); prContReg (binInst[1] & 0x0fff); printf ("\n"); } break; case itMoveFCCR: printf ("CCR, "); prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7, &binInst [1], 0, prtAddress); printf ("\n"); break; case itCpBcc: if ((binInst [0] & 0x40) == 0) printf ("#%#x%04x\n", binInst [1], binInst [2]); /* xxx 0x */ else printf ("#%#x\n", binInst [1]); break; case itCpDbcc: printf("D%x,#%#x\n", binInst [0] & 7, binInst [2]); break; case itCpTrapcc: switch (binInst [0] & 7)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -