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

📄 load.c

📁 虚拟机设计与实现——C/C++
💻 C
字号:
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                                                                   ++  load.c - this file implements load instructions                  ++				LBI, LWI, LDI, LQI, LF1I, LF2I						++				LAD, LAI											++               LB, LW, LD, LQ, LF1, LF2			     			++                                                                   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*//*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  macros                                                           ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*//*#define DBG_RUN		1*/#ifdef DBG_RUN#define DBG_RUN0(str);				printf("run(): "); printf(str);#define DBG_RUN1(str,arg1);			printf("run(): "); printf(str,arg1);#else#define DBG_RUN0(str);#define DBG_RUN1(str,arg1);				#endif	/*	LBI $r1, byte constant ->  BBB  		first byte	= instruction	second byte = register to put constant into	third byte	= constant to place in register*/#define HANDLE_LBI();	DBG_RUN0("Optimized HANDLE_LBI\n");R[RAM[R[$IP]+1]]=(S1)RAM[R[$IP]+2]; R[$IP]=R[$IP]+3;					  /*-----------------------------------------------------------------*/#define HANDLE_LWI();	DBG_RUN0("Optimized HANDLE_LWI\n");R[RAM[R[$IP]+1]]=(S2)*((S2*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+4;/*-----------------------------------------------------------------*/#define HANDLE_LDI();	DBG_RUN0("Optimized HANDLE_LDI\n"); R[RAM[R[$IP]+1]]=(S4)*((S4*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+6;/*-----------------------------------------------------------------*/#define HANDLE_LQI();	DBG_RUN0("Optimized HANDLE_LQI\n"); R[RAM[R[$IP]+1]]=(S8)*((S8*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+10;/*-----------------------------------------------------------------*/#define HANDLE_LF1I();	DBG_RUN0("Optimized HANDLE_LF1I\n"); Rf[RAM[R[$IP]+1]]=(F4)*((F4*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+6;/*-----------------------------------------------------------------*/#define HANDLE_LF2I();	DBG_RUN0("Optimized HANDLE_LF2I\n"); Rd[RAM[R[$IP]+1]]=(F8)*((F8*)&RAM[R[$IP]+2]);R[$IP]=R[$IP]+10;/*-----------------------------------------------------------------*//* LAD $r1, address */ #define HANDLE_LAD();	DBG_RUN0("Optimized HANDLE_LAD\n"); R[RAM[R[$IP]+1]]=(U8)*((U8*)&RAM[R[$IP]+2]);badAddress(R[RAM[R[$IP]+1]],R[$IP]); R[$IP]=R[$IP]+10;/*-----------------------------------------------------------------*//* LAI $r1, $r2, qword*/ #define HANDLE_LAI();	DBG_RUN0("Optimized HANDLE_LAI\n"); R[RAM[R[$IP]+1]]=(R[RAM[R[$IP]+2]])+((S8)*((S8*)&RAM[R[$IP]+3]));badAddress(R[RAM[R[$IP]+1]],R[$IP]); R[$IP]=R[$IP]+11;/*-----------------------------------------------------------------*//*	LB $r1, $r2 ->  BBB  		first byte = instruction	second byte = register to put byte into	third byte = register containing address where byte is located */#define HANDLE_LB();	DBG_RUN0("Optimized HANDLE_LB\n");badAddress(R[RAM[R[$IP]+2]],R[$IP]);R[RAM[R[$IP]+1]] = (S8)(*((S1*)&RAM[R[RAM[R[$IP]+2]]]));R[$IP]=R[$IP]+3;/*-----------------------------------------------------------------*/#define HANDLE_LW();	DBG_RUN0("Optimized HANDLE_LW\n");badAddress(R[RAM[R[$IP]+2]],R[$IP]);R[RAM[R[$IP]+1]] = (S8)(*((S2*)&RAM[(U8)R[RAM[R[$IP]+2]]]));R[$IP]=R[$IP]+3;/*-----------------------------------------------------------------*/#define HANDLE_LD();	DBG_RUN0("Optimized HANDLE_LD\n");badAddress(R[RAM[R[$IP]+2]],R[$IP]);R[RAM[R[$IP]+1]] = (S8)(*((S4*)&RAM[(U8)R[RAM[R[$IP]+2]]]));R[$IP]=R[$IP]+3;/*-----------------------------------------------------------------*/#define HANDLE_LQ();	DBG_RUN0("Optimized HANDLE_LQ\n");badAddress(R[RAM[R[$IP]+2]],R[$IP]);R[RAM[R[$IP]+1]] = (S8)(*((S8*)&RAM[(U8)R[RAM[R[$IP]+2]]]));R[$IP]=R[$IP]+3;/*-----------------------------------------------------------------*//* LFI $f, $r */#define HANDLE_LF1();	DBG_RUN0("Optimized HANDLE_LF1\n");badAddress(R[RAM[R[$IP]+2]],R[$IP]);Rf[RAM[R[$IP]+1]] = *((F4*)&RAM[(U8)R[RAM[R[$IP]+2]]]);R[$IP]=R[$IP]+3;	/*-----------------------------------------------------------------*//* LF2 $d, $r */#define HANDLE_LF2();	DBG_RUN0("Optimized HANDLE_LF2\n");badAddress(R[RAM[R[$IP]+2]],R[$IP]);Rd[RAM[R[$IP]+1]] = *((F8*)&RAM[(U8)R[RAM[R[$IP]+2]]]);R[$IP]=R[$IP]+3;

⌨️ 快捷键说明

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