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

📄 dsmlib.c

📁 VxWorks BSP框架源代码包含头文件和驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
	    return (1);	case 0x06:				/* reg indirect w.index modes */	    return (mode6And7Words (&extension [0]));	case 0x07:				/* memory indirect */	    switch (reg)		{		/* With mode 7, sub-modes are determined by the		   register number */		case 0x0:			/* abs.short */		case 0x2:			/* PC + off */		     return (1);		case 0x3:			/* PC + ind + off */		    return (mode6And7Words (&extension [0]));		case 0x1:				/* abs.long */		    return (2);		case 0x4:				/* imm. */		    return (size);		}	}    /* We never get here, but just for lint ... */    return (0);    }/********************************************************************************* mode6And7Words - number of words of extension needed for modes 6 and 7*/LOCAL int mode6And7Words    (    FAST USHORT extension []    )    {    int count = 1;	/* number of words in extension */    if ((extension [0] & 0x0100) == 0)		/* (An) + (Xn) + d8 */	return (count);    switch ((extension [0] & 0x30) >> 4)	/* base displacement size */	{	case 0:		/* reserved or NULL displacement */	case 1:	    break;	case 2:		/* word displacement */	    count += 1;	    break;	case 3:		/* long displacement */	    count += 2;	    break;	}    if ((extension [0] & 0x40) == 0)		/* index operand added */	{	switch (extension [0] & 3)	    {	    case 0:		/* reserved or NULL displacement */	    case 1:		break;	    case 2:		/* word displacement */		count += 1;		break;	    case 3:		/* long displacement */		count += 2;		break;	    }	}    return (count);    }/********************************************************************************* prtArgs - Print the arguments for an instruction*/LOCAL void prtArgs    (    USHORT binInst [],  /* Pointer to the binary instruction */    FAST INST *iPtr,    /* Pointer to the INST describing binInst */    int address,        /* Address at which the instruction resides */    FUNCPTR prtAddress  /* routine to print addresses. */    )    {    int frstArg;    int displacement;    int sizeData;    switch (iPtr->type)	{	case itBra:	    switch (binInst [0] & 0xff)		{		case 0:		    displacement = (short) binInst[1];		    break;		case 0xff:		    displacement = (((short) binInst [1] << 16) | binInst [2]);		    break;		default:		    displacement = (char) (binInst [0] & 0xff);		    break;		}	    (*prtAddress) (address + 2 + displacement);	    printf ("\n");	    break;	case itDivW:	    prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7,			&binInst [1], 2, prtAddress);	    printf (",D%x\n", (binInst [0] & 0x0e00) >> 9);	    break;	case itChk:	    prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7,			&binInst [1], (binInst [0] & 0x80) ? 2 : 4, prtAddress);	    printf (",D%x\n", (binInst [0] & 0x0e00) >> 9);	    break;	case itChk2:	    prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 7,			&binInst [2], 0, prtAddress);	    printf ((binInst [1] & 0x8000) ? ",A%x\n" : ",D%x\n",		    (binInst [1] & 0x7000) >> 12);	    break;	case itLea:	    prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7,			&binInst [1], 2, prtAddress);	    printf (",A%x\n", (binInst [0] & 0x0e00) >> 9);	    break;	case itComplete:	    /* No arguments */	    printf ("\n");	    break;	case itStatBit:	case itCallm:	    printf ("#%#x,", binInst [1]);	    prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7,			&binInst [2], 0, prtAddress);	    printf ("\n");	    break;	case itDynBit:	    printf ("D%x,", (binInst [0] & 0x0e00) >> 9);	    prEffAddr ((binInst [0] & 0x38) >> 3, binInst [0] & 0x7,			&binInst [1], 0, prtAddress);	    printf ("\n");	    break;	case itExg:	    switch ((binInst [0] & 0x00f8) >> 3)		{		case 0x08:		    printf ("D%x,D%x\n", (binInst [0] & 0x0e00) >> 9,					 binInst [0] & 0x0007);		    break;		case 0x09:		    printf ("A%x,A%x\n", (binInst [0] & 0x0e00) >> 9,					 binInst [0] & 0x0007);		    break;		case 0x11:		    printf ("D%x,A%x\n", (binInst [0] & 0x0e00) >> 9,					 binInst [0] & 0x0007);		    break;		}	    break;	case itImm:	    switch ((binInst [0] & 0x00c0) >> 6)	/* size */		{		case 0:					/* byte */		    printf ("#%#x,", binInst [1] & 0x00ff);		    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;#if ((CPU==MC68040) || (CPU==MC68060) || (CPU==MC68LC040))	case itMove16:	    printf ("(A%x)+,(A%x)+\n", binInst [0] &0x07,		    (binInst [1] & 0x7000) >> 12);	    break;	case itMove16L:	    switch ((binInst [0] & 0x0018) >> 3)	/* op-mode */		{		case 0:		    printf ("(A%x)+,0x%x%x", binInst[0] & 0x07, binInst[1],			    binInst[2]);		    break;		case 1:		    printf ("0x%x%x,(A%x)-", binInst[1], binInst[2],			    binInst[0] & 0x07);		    break;		case 2:		    printf ("(A%x),0x%x%x", binInst[0] & 0x07, binInst[1],			    binInst[2]);		    break;		case 3:		    printf ("0x%x%x,(A%x)", binInst[1], binInst[2],			    binInst[0] & 0x07);		    break;		}	    printf ("\n");	    break;	case itCinv:	case itCpush:	    switch ((binInst [0] & 0x00c0) >>6)		{		case 1:		    printf ("DC,(A%x)", binInst [0] & 0x07);		    break;		case 2:		    printf ("IC,(A%x)", binInst [0] & 0x07);		    break;		case 3:		    printf ("BC,(A%x)", binInst [0] & 0x07);		    break;		}	    printf ("\n");	    break;	case itCinva:	case itCpusha:	    switch ((binInst [0] & 0x00c0) >>6)		{		case 1:		    printf ("DC");		    break;		case 2:		    printf ("IC");		    break;		case 3:		    printf ("BC");		    break;		}	    printf ("\n");	    break;	case itPtest:	    printf ("(A%x)\n", binInst [0] & 0x07);	    break;	case itPflush:	    switch ((binInst [0] & 0x0018) >> 3)		{		case 0:		    printf ("(A%x)", binInst [0] & 0x07);		    break;		case 1:		    printf ("(A%x)", binInst [0] & 0x07);		    break;		case 2:		case 3:		    break;		}	    printf ("\n");	    break;#endif	/* ((CPU==MC68040) || (CPU==MC68060) || (CPU==MC68LC040)) */

⌨️ 快捷键说明

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