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

📄 dbgcmd.c

📁 虚拟机设计与实现——C/C++
💻 C
📖 第 1 页 / 共 2 页
字号:
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%d\n",(S1)RAM[current_byte]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);

		}break;
		case LWI:	/* LWI $r1, word constant  BBW */
		{
			S2 *si;

			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf(" %s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			raw[2] = RAM[current_byte];
			current_byte++;
			raw[3] = RAM[current_byte];

			si = ((S2*)(&RAM[current_byte-1]));
			pS2(*si); printf("\n");

			printRawBytes(raw,4);

		}break;
		case LDI:	/* LDI $r1, dword constant  BBD */
		{
			S4 *li;

			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			raw[2] = RAM[current_byte];
			current_byte++;
			raw[3] = RAM[current_byte];
			current_byte++;
			raw[4] = RAM[current_byte];
			current_byte++;
			raw[5] = RAM[current_byte];

			li = (S4 *)&RAM[current_byte-3];
			pS4(*li); printf("\n");

			printRawBytes(raw,6);

		}break;
		case LQI:	/* LQI $r1, qword constant  BBQ*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			raw[2] = RAM[current_byte];
			current_byte++;
			raw[3] = RAM[current_byte];
			current_byte++;
			raw[4] = RAM[current_byte];
			current_byte++;
			raw[5] = RAM[current_byte];
			current_byte++;
			raw[6] = RAM[current_byte];
			current_byte++;
			raw[7] = RAM[current_byte];
			current_byte++;
			raw[8] = RAM[current_byte];
			current_byte++;
			raw[9] = RAM[current_byte];

			pS8(*((S8 *)&RAM[current_byte-7]));
			printf("\n");
			printRawBytes(raw,10);	

		}break;
		case LF1I:  /* LF1I $f, float */
		{
			F4 *fi;

			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rf_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			raw[2] = RAM[current_byte];
			current_byte++;
			raw[3] = RAM[current_byte];
			current_byte++;
			raw[4] = RAM[current_byte];
			current_byte++;
			raw[5] = RAM[current_byte];

			fi = (F4 *)&RAM[current_byte-3];
			printf("%g\n",*fi);

			printRawBytes(raw,6);

		}break;
		case LF2I:	/* LF2I $d, double */
		{
			F8 *di;

			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rd_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			raw[2] = RAM[current_byte];
			current_byte++;
			raw[3] = RAM[current_byte];
			current_byte++;
			raw[4] = RAM[current_byte];
			current_byte++;
			raw[5] = RAM[current_byte];
			current_byte++;
			raw[6] = RAM[current_byte];
			current_byte++;
			raw[7] = RAM[current_byte];
			current_byte++;
			raw[8] = RAM[current_byte];
			current_byte++;
			raw[9] = RAM[current_byte];

			di = (F8 *)&RAM[current_byte-7];
			printf("%g\n",*di);

			printRawBytes(raw,10);	
			
		}break;
		case LAD:	/* LAD $r1, address = BBQ */ 
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			raw[2] = RAM[current_byte];
			current_byte++;
			raw[3] = RAM[current_byte];
			current_byte++;
			raw[4] = RAM[current_byte];
			current_byte++;
			raw[5] = RAM[current_byte];
			current_byte++;
			raw[6] = RAM[current_byte];
			current_byte++;
			raw[7] = RAM[current_byte];
			current_byte++;
			raw[8] = RAM[current_byte];
			current_byte++;
			raw[9] = RAM[current_byte];

			pU8(*((U8 *)&RAM[current_byte-7]));
			printf("\n");
			printRawBytes(raw,10);	
			
		}break;
		case LAI:   /* LAI $r1, $r2, qword     BBBQ*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];
			current_byte++;

			raw[3] = RAM[current_byte];
			current_byte++;
			raw[4] = RAM[current_byte];
			current_byte++;
			raw[5] = RAM[current_byte];
			current_byte++;
			raw[6] = RAM[current_byte];
			current_byte++;
			raw[7] = RAM[current_byte];
			current_byte++;
			raw[8] = RAM[current_byte];
			current_byte++;
			raw[9] = RAM[current_byte];
			current_byte++;
			raw[10] = RAM[current_byte];

			pS8(*((S8 *)&RAM[current_byte-7]));
			printf("\n");
			printRawBytes(raw,11);	

		}break;
		case LB:	/* LB $r1,$r2	BBB */
		case LW:
		case LD:
		case LQ:
		case SB:	/* SB $r1,$r2   BBB*/ 
		case SW:
		case SD:
		case SQ:
		case MOV:	/* MOV $r1, $r2    BBB */
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);	

		}break;
		case LF1:	/* LF1  $f, $r */
		case SF1:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rf_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);	

		}break;
		case LF2:	/* LF2  $d, $r */
		case SF2:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rd_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);	

		}break;
		case MOVF:	/*MOVF  $f1, $f2*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rf_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rf_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);	

		}break;
		case MOVD:	/*MOVD  $d1, $d2*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rd_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rd_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);	

		}break;
		case PUSHB:	/* PUSHB $r1  BB */
		case PUSHW:
		case PUSHD:
		case PUSHQ:
		case POPB:
		case POPW:
		case POPD:
		case POPQ:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];

			printRawBytes(raw,2);

		}break;
		case PUSHF1:	/* PUSHF1 $f */
		case POPF1:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rf_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];

			printRawBytes(raw,2);

		}break;
		case PUSHF2:	/* PUSHF2 $d */
		case POPF2:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rd_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];

			printRawBytes(raw,2);

		}break;
		case JMP:	/* JMP $r1 */
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];

			printRawBytes(raw,2);

		}break;
		case JE:	/*JE $r1, $r2, $r3 BBBB */
		case JNE:
		case SLT:
		case AND:	/* AND $r1, $r2, $r3 */
		case OR:
		case XOR:
		case BT:
		case SRA:  /*SRA  $r1, $r2, $r3   BBBB */
		case SRL:
		case SL:
		case ADD: /* ADD $r1, $r2, $r3  */
		case SUB:
		case MULT:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[3] = RAM[current_byte];

			printRawBytes(raw,4);	

		}break; 
		case INT: /* INT #vector	BB */
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%u\n",RAM[current_byte]);
			raw[1] = RAM[current_byte];

			printRawBytes(raw,2);

		}break;	
		case EI:			/* EI	B */
		case DI:
		case HALT:
		case NOP:
		{
			printf("%s\n",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];

			printRawBytes(raw,1);

		}break;
		case NOT:  /* NOT $r1, $r2 */
		case BS:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];
		
			printRawBytes(raw,3);

		}break;
		case DIV:  /* DIV $r1, $r2, $r3, $r4 */
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[3] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[4] = RAM[current_byte];

			printRawBytes(raw,5);		

		}break;
		case CAST_IF: /* CAST_IF $r, $f  BBB*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rf_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);

		}break;
		case CAST_ID: /* CAST_ID $r, $d  BBB*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",R_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rd_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);

		}break;
		case CAST_FI: /* CAST_FI $f, $r  BBB*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rf_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);

		}break;
		case CAST_FD: /* CAST_FD $f, $d  BBB*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rf_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rd_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);

		}break;
		case CAST_DI: /* CAST_DI $d, $r  BBB*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rd_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",R_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);

		}break;
		case CAST_DF: /* CAST_DF $d, $f  BBB*/
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rd_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rf_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];

			printRawBytes(raw,3);

		}break;
		case FADD: /* FADD $f1, $f2, $f3    BBBB */
		case FSUB:
		case FMULT:
		case FDIV:
		case FSLT:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rf_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rf_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rf_STR[RAM[current_byte]]);
			raw[3] = RAM[current_byte];

			printRawBytes(raw,4);	

		}break;
		case DADD: /* DADD $d1, $d2, $d3    BBBB */
		case DSUB:
		case DMULT:
		case DDIV:
		case DSLT:
		{
			printf("%s ",I_Set[RAM[current_byte]]);
			raw[0] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rd_STR[RAM[current_byte]]);
			raw[1] = RAM[current_byte];
			current_byte++;

			printf("%s ",Rd_STR[RAM[current_byte]]);
			raw[2] = RAM[current_byte];
			current_byte++;

			printf("%s\n",Rd_STR[RAM[current_byte]]);
			raw[3] = RAM[current_byte];

			printRawBytes(raw,4);

		}break;
		default:
		{
			printf("instruction (%u), not handled\n",RAM[current_byte]);
		}
	}

	printBasicRegisters();
	return;

}/*end void printDbgInstr*/

/*-----------------------------------------------------------------*/

void printRawBytes(U1 *ptr, U1 len)
{
	U1 i;
	for(i=0;i<len;i++){ printf("[%3u]",ptr[i]); }
	printf("\n");
	return;

}/*end printRawBytes*/

⌨️ 快捷键说明

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