代码拉取完成,页面将自动刷新
#include <stdio.h>
#include "funconfig.h"
#include "util.h"
#include "register.h"
#include "instruct.h"
natives funList[]={initfunc(print),initfunc(sleep),initfunc(gpio)};
instruct inst[]={instructInit(jmp),
instructInit(mov),
instructInit(push),
instructInit(pop),
instructInit(add),
instructInit(sub),
instructInit(mul),
instructInit(call),
instructInit(cmp),
instructInit(div),
instructInit(load),
instructInit(store),
instructInit(ret)
};
//通过下标索引
instructP insTemp[255];
char code[1024*2]={0};
int console=0;
int main(int argc,char**argv){
int size=loadCode(argv[1],code);
int *p=(int*)code;
Register R;
R.code=code;
R.RPC=*p;
R.funList=&funList;
R.funSize=sizeof(funList)/sizeof(natives);
char opt=0;
char isRun=0;
int optSize=sizeof(inst)/sizeof(instruct);
for(int i=0;i<255;i++){
insTemp[i]=0;
for(int j=0;j<optSize;j++){
if(inst[j].isRun(i)>0){
insTemp[i]=&inst[j];
break;
}
}
}
printf("----------start------------\r\n");
while(1){
opt=code[R.RPC];
if(console==1){
printf("AX:%04X BX:%04X CX:%04X DX:%04X\r\n"
"EX:%04X BP:%04X SS:%04X SP:%04X\r\n"
"PC:%08X\r\n",R.RAX,R.RBX,R.RCX,R.RDX,R.REX,R.RBP,
R.RSS,R.RSP,R.RPC);
printf("opt:%02XH\r\n",opt);
}
//printf("opt:%02X %04X %04X \r\n",opt,R.RSP,R.RSS);
//这个地方效率太低了,可以通过数组直接下表索引来处理
isRun=0;
if(insTemp[opt]!=NULL){
insTemp[opt]->parseRun(&R);
isRun=1;
}
if(isRun==0){
break;
}
}
printf("progrom exit...\r\n");
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。