⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dis_ppc.c

📁 完整的Bell实验室的嵌入式文件系统TFS
💻 C
📖 第 1 页 / 共 2 页
字号:
    cp = (uchar *)&instr;    printf("data    %02x%02x%02x%02x\n",cp[0],cp[1],cp[2],cp[3]);    return(0);}intopcode03(ulong instr){    printf("twi %x,%s,0x%04X\n",to(instr),ra(instr),(ushort)(instr&IM));    return(0);}intopcode07(ulong instr){    return(rt_ra_x("mulli",instr));}intopcode08(ulong instr){    return(rt_ra_x("subfic",instr));}intopcode10(ulong instr){    return(bf_ra("cmpli",instr));}intopcode11(ulong instr){    return(bf_ra("cmpi",instr));}intopcode12(ulong instr){    return(rt_ra_x("addic",instr));}intopcode13(ulong instr){    return(rt_ra_x("addic.",instr));}intopcode14(ulong instr){    return(rt_ra_x("addi",instr));}intopcode15(ulong instr){    return(rt_ra_x("addis",instr));}intopcode16(ulong instr){    ulong   mask;    if (instr & BD_NEGATIVE)         mask = 0xffff0000;    else        mask = 0;    switch((instr & BO) >> 21) {    case 16:        prnem(tbl17[aalk(instr)]);        printf("0x%lx\n", (instr & BD) | mask);        return(0);    case 0:        prnem(tbl18[aalk(instr)]);        printf("%s,0x%lx\n", bi(instr), (instr & BD) | mask);        return(0);    case 8:        prnem(tbl19[aalk(instr)]);        printf("%s,0x%lx\n", bi(instr), (instr & BD) | mask);        return(0);    case 18:        prnem(tbl20[aalk(instr)]);        printf("0x%lx\n", (instr & BD) | mask);        return(0);    case 2:        prnem(tbl21[aalk(instr)]);        printf("%s,0x%lx\n", bi(instr), (instr & BD) | mask);        return(0);    case 10:        prnem(tbl22[aalk(instr)]);        printf("%s,0x%lx\n", bi(instr), (instr & BD) | mask);        return(0);    }    prnem(tbl7[aalk(instr)]);    printf("%ld,%ld,0x%lx\n", ((instr & BO) >> 21),((instr & BI) >> 16),        (instr & BD) | mask);    return(0);}intopcode17(ulong instr){    if (instr & 0x2)        printf("sc\n");    else        return(-1);    return(0);}intopcode18(ulong instr){    ulong   mask, delta, dest, offset;    char    func[32];    if (instr & LI_NEGATIVE)         mask = 0xfe000000;    else        mask = 0;    prnem(tbl6[aalk(instr)]);    delta = (instr & LI) | mask;    dest = (ulong)DisAddr + delta;#if INCLUDE_TFSSYMTBL    if (AddrToSym(-1,dest,func,&offset)) {        printf("0x%lx (%s",delta,func);        if (offset)             printf(": 0x%lx",dest);        printf(")\n");    }    else#endif        printf("0x%lx (addr=0x%lx)\n",delta,dest);    return(0);}intopcode19(ulong instr){    if (instr == ISYNC) {        printf("isync\n");        return(0);    }    switch(xo_oe(instr)) {    case 0:        prnem("mcrf");        printf("%s,%s\n",bf(instr),bfa(instr));        break;    case 16:        if ((instr & (BO_0 | BO_2)) != (BO_0 | BO_2)) {            if (instr & LK)                prnem("bclrl");            else                prnem("bclr");        }        else {            if (instr & LK)                prnem("blrl");            else                prnem("blr");        }        if ((instr & (BO_0 | BO_2)) != (BO_0 | BO_2))            printf("%s,%s",bo(instr),bi(instr));        printf("\n");        return(0);    case 33:        return(bt_ba_bb("crnor",instr));    case 50:        printf("rfi\n");        return(0);    case 51:        printf("rfci\n");        return(0);    case 129:        return(bt_ba_bb("crandc",instr));    case 193:        return(bt_ba_bb("crxor",instr));    case 225:        return(bt_ba_bb("crnand",instr));    case 257:        return(bt_ba_bb("crand",instr));    case 289:        return(bt_ba_bb("creqv",instr));    case 417:        return(bt_ba_bb("crorc",instr));    case 449:        return(bt_ba_bb("cror",instr));    case 528:        if ((instr & (BO_0 | BO_2)) != (BO_0 | BO_2))            prnem("bcctr");        else            prnem("bctr");        if (instr & LK)            printf("l");        if ((instr & (BO_0 | BO_2)) != (BO_0 | BO_2))            printf("%s,%s",bo(instr),bi(instr));        printf("\n");        return(0);    }    return(-1);}intopcode20(ulong instr){    return(ra_rs_sh_mb_me("rlwimi",instr));}intopcode21(ulong instr){    return(ra_rs_sh_mb_me("rlwinm",instr));}intopcode23(ulong instr){    prnemdot("rlwnm",instr & RC);    printf("%s,%s,%s,0x%04X,0x%04X\n",        ra(instr),rs(instr),rb(instr),mb(instr),me(instr));    return(0);}intopcode24(ulong instr){    prnem("ori");    printf("%s,%s,0x%04X%s",        ra(instr),rs(instr),(ushort)(instr&IM),        instr==0x60000000 ? " (nop)\n" : "\n");    return(0);}intopcode25(ulong instr){    return(ra_rs("oris",instr));}intopcode26(ulong instr){    return(ra_rs("xori",instr));}intopcode27(ulong instr){    return(ra_rs("xoris",instr));}intopcode28(ulong instr){    return(ra_rs("addi.",instr));}intopcode29(ulong instr){    return(ra_rs("addis.",instr));}intopcode31(ulong instr){    if (instr == SYNC) {        printf("sync\n");        return(0);    }    switch(xo_oe(instr)) {    case 8:        return(rt_ra_rb(tbl13[oerc(instr)],instr));    case 10:        return(rt_ra_rb(tbl2[oerc(instr)],instr));    case 20:        return(rt_ra_rb("lwarx",instr));    case 23:        return(rt_ra_rb("lwzx",instr));    case 40:        return(rt_ra_rb(tbl12[oerc(instr)],instr));    case 55:        return(rt_ra_rb("lwzux",instr));    case 87:        return(rt_ra_rb("lbzx",instr));    case 104:        return(rt_ra(tbl11[oerc(instr)],instr));    case 119:        return(rt_ra_rb("lbzux",instr));    case 136:        return(rt_ra_rb(tbl14[oerc(instr)],instr));    case 138:        return(rt_ra_rb(tbl3[oerc(instr)],instr));    case 151:        return(rs_ra_rb("stwx",instr));    case 183:        return(rs_ra_rb("stwux",instr));    case 200:        return(rt_ra(tbl16[oerc(instr)],instr));    case 202:        return(rt_ra(tbl5[oerc(instr)],instr));    case 215:        return(rs_ra_rb("stbx",instr));    case 232:        return(rt_ra(tbl15[oerc(instr)],instr));    case 234:        return(rt_ra(tbl4[oerc(instr)],instr));    case 235:        return(rt_ra_rb(tbl10[oerc(instr)],instr));    case 266:        return(rt_ra_rb(tbl1[oerc(instr)],instr));    case 279:        return(rt_ra_rb("lhzx",instr));    case 311:        return(rt_ra_rb("lhzux",instr));    case 459:        return(rt_ra_rb(tbl9[oerc(instr)],instr));    case 491:        return(rt_ra_rb(tbl8[oerc(instr)],instr));    case 534:        return(rt_ra_rb("lwbrx",instr));    case 662:        return(rs_ra_rb("stwbrx",instr));    case 512:        prnem("mcrxr");        printf("%s\n",bf(instr));        return(0);    case 533:        return(rt_ra_rb("lswx",instr));    case 536:        prnemdot("srw",instr & RC);        printf("%s,%s,%s\n", ra(instr),rs(instr),rb(instr));        return(0);    case 597:        prnem("lswi");        printf("%s,%s,0x%04X\n",rt(instr),ra(instr),nb(instr));        return(0);    case 661:        return(rs_ra_rb("stswx",instr));    case 725:        prnem("stswi");        printf("%s,%s,0x%04X\n",rs(instr),ra(instr),nb(instr));        return(0);    case 790:        return(rt_ra_rb("lhbrx",instr));    case 792:        prnemdot("sraw",instr & RC);        printf("%s,%s,%s\n", ra(instr),rs(instr),rb(instr));        return(0);    case 824:        prnemdot("srawi",instr & RC);        printf("%s,%s,0x%04X\n", ra(instr),rs(instr),sh(instr));        return(0);    case 854:        printf("eieio\n");  /* yep, that's really an instruction */        return(0);    case 918:        return(rs_ra_rb("sthbrx",instr));    case 922:        prnemdot("extsh",instr & RC);        printf("%s,%s,%s\n", rs(instr),ra(instr),rb(instr));        return(0);    case 954:        prnemdot("extsb",instr & RC);        printf("%s,%s,%s\n", rs(instr),ra(instr),rb(instr));        return(0);    case 966:        return(ra_rb("icci",instr));    case 982:        return(ra_rb("icbi",instr));    case 998:        return(ra_rb("icread",instr));    case 1014:        return(ra_rb("dcbz",instr));    }    switch(xo_nooe(instr)) {    case 0:        prnem("cmp");        printf("%s,0,%s,%s\n",bf(instr),ra(instr),rb(instr));        return(0);    case 4:        prnem("tw");        printf("0x%04X,%s,%s\n",to(instr),ra(instr),rb(instr));        return(0);    case 11:        prnemdot("mulhwu",instr & RC);        printf("%s,%s,%s\n", rt(instr),ra(instr),rb(instr));        return(0);    case 19:        prnem("mfcr");        printf("%s\n",rt(instr));        return(0);    case 24:        prnemdot("slw",instr & RC);        printf("%s,%s,%s\n", ra(instr),rs(instr),rb(instr));        return(0);    case 26:        prnemdot("cntizw",instr & RC);        printf("%s,0,%s,%s\n", rs(instr),ra(instr),rb(instr));        return(0);    case 28:        prnemdot("andc",instr & RC);        printf("%s,%s,%s\n", rs(instr),ra(instr),rb(instr));        return(0);    case 32:        prnem("cmpl");        printf("%s,0,%s,%s\n",bf(instr),ra(instr),rb(instr));        return(0);    case 54:        prnem("dcbst");        printf("%s,%s\n",ra(instr),rb(instr));        return(0);    case 60:        prnemdot("and",instr & RC);        printf("%s,%s,%s\n", rs(instr),ra(instr),rb(instr));        return(0);    case 75:        prnemdot("mulhw",instr & RC);        printf("%s,%s,%s\n", rt(instr),ra(instr),rb(instr));        return(0);    case 83:        prnem("mfmsr");        printf("%s\n",rt(instr));        return(0);    case 86:        prnem("dcbf");        printf("%s,%s\n",ra(instr),rb(instr));        return(0);    case 124:        prnemdot("nor",instr & RC);        printf("%s,%s,%s\n", ra(instr),rs(instr),rb(instr));        return(0);    case 131:        prnem("wrtee");        printf("%s\n",rs(instr));        return(0);    case 144:        prnem("mtcrf");        printf("0x%x,%s\n",fxm(instr),rs(instr));        return(0);    case 146:        prnem("mtmsr");        printf("%s\n",rs(instr));        return(0);    case 150:        if (instr & 1)            return(rs_ra_rb("stwcx.",instr));        else            return(-1);    case 163:        prnem("wrteei");        if (instr & 0x8000)            printf("1\n");        else            printf("0\n");        return(0);    case 246:        prnem("dcbtst");        printf("%s,%s\n",ra(instr),rb(instr));        return(0);    case 247:        prnem("stbux");        printf("%s,%s\n",rs(instr),ra(instr));        return(0);    case 262:        prnem("icbt");        printf("%s,%s\n",ra(instr),rb(instr));        return(0);    case 278:        prnem("dcbt");        printf("%s,%s\n",ra(instr),rb(instr));        return(0);    case 284:        prnemdot("eqv",instr & RC);        printf("%s,%s,%s\n", rs(instr),ra(instr),rb(instr));        return(0);    case 316:        prnemdot("xor",instr & RC);        printf("%s,%s,%s\n", rs(instr),ra(instr),rb(instr));        return(0);    case 323:#if USE_SPRDCR_NAMES        printf("mf%s    %s\n",dcrn(instr),rt(instr));#else        prnem("mfdcr");        printf("%s,%s\n",dcrn(instr),rt(instr));#endif        return(0);    case 339:#if USE_SPRDCR_NAMES        printf("mf%s,%s\n",sprf(instr),rt(instr));#else        prnem("mfspr");        printf("%s,%s\n",sprf(instr),rt(instr));#endif        return(0);    case 343:        prnem("lhax");        printf("%s,%s,%s\n",rt(instr),ra(instr),rb(instr));        return(0);    case 370:        prnem("tlbia");        printf("\n");        return(0);    case 375:        prnem("lhaux");        printf("%s,%s,%s\n",rt(instr),ra(instr),rb(instr));        return(0);    case 407:        return(rs_ra_rb("sthx",instr));    case 412:        prnemdot("orc",instr & RC);        printf("%s,%s,%s\n", ra(instr),rs(instr),rb(instr));        return(0);    case 439:        return(rs_ra_rb("sthux",instr));    case 444:        prnemdot("or",instr & RC);        printf("%s,%s,%s\n", ra(instr),rs(instr),rb(instr));        return(0);    case 451:#if USE_SPRDCR_NAMES        printf("mt%s    %s\n",dcrn(instr),rs(instr));#else        prnem("mtdcr");        printf("%s,%s\n",dcrn(instr),rs(instr));#endif        return(0);    case 454:        prnem("dcci");        printf("%s,%s\n",ra(instr),rb(instr));        return(0);    case 467:#if USE_SPRDCR_NAMES        printf("mt%s,%s\n",sprf(instr),rs(instr));#else        prnem("mtspr");        printf("%s,%s\n",sprf(instr),rs(instr));#endif        return(0);    case 470:        prnem("dcbi");        printf("%s,%s\n",ra(instr),rb(instr));        return(0);    case 476:        prnemdot("nand",instr & RC);        printf("%s,%s,%s\n", ra(instr),rs(instr),rb(instr));        return(0);    case 486:        return(rt_ra_rb("dcread",instr));    }    printf("opcode31 error: 0x%02x%02x%02x%02x\n",        ((uchar *)&instr)[0], ((uchar *)&instr)[1],        ((uchar *)&instr)[2], ((uchar *)&instr)[3]);    printf("xo_oe() = 0x%04X, xo_nooe() = 0x%04X\n",        xo_oe(instr),xo_nooe(instr));    return(-1);}intopcode32(ulong instr){    return(rt_d_ra("lwz",instr));}intopcode33(ulong instr){    return(rt_d_ra("lwzu",instr));}intopcode34(ulong instr){    return(rt_d_ra("lbz",instr));}intopcode35(ulong instr){    return(rt_d_ra("lbzu",instr));}intopcode36(ulong instr){    return(rs_d_ra("stw",instr));}intopcode37(ulong instr){    return(rs_d_ra("stwu",instr));}intopcode38(ulong instr){    return(rt_d_ra("stb",instr));}intopcode39(ulong instr){    return(rt_d_ra("stbu",instr));}intopcode40(ulong instr){    return(rt_d_ra("lhz",instr));}intopcode41(ulong instr){    return(rt_d_ra("lhzu",instr));}intopcode42(ulong instr){    return(rt_d_ra("lha",instr));}intopcode43(ulong instr){    return(rt_d_ra("lhau",instr));}intopcode44(ulong instr){    return(rt_d_ra("sth",instr));}intopcode45(ulong instr){    return(rs_d_ra("sthu",instr));}intopcode46(ulong instr){    return(rt_d_ra("lmw",instr));}intopcode47(ulong instr){    return(rs_d_ra("stmw",instr));}#endif  /* INCLUDE_DISASSEMBLER */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -