http://www.axonnsays.com

“智能坊”虚拟机的实现

  讲解:

  ((void (*)(void)) (0×0008))();

QQ截图20150409151007

  return step;

  应用每次挪用API时需要把API 编码存放于[email protected],API需要传给系统的参数存放于缓存区Communicate[4*1024]@0xEFFF,然后call 0×0012

  __root void __CallApi(CALL_API_FUN tep) {

  Result[0] = tep;

  虚拟机代码片断:

  __root __code static const char exitcall[]@0×0008 = {0×22,0×22};

  0012H API挪用地点

  “智能坊”虚拟机的实现

  应用需要挪用系统的一些成果时,需要挪用此接口,如查询某个账户余额。

  INT16U methodID = ((INT16U) GetExRam(VM_FUN_CALL_ADDR) | ((INT16U) GetExRam(VM_FUN_CALL_ADDR+1) << 8));

  __root __code static const char apicall[]@0×0012 = {0×22,0×22};

  0008H 应用退出地点

  存放可执行代码。

  存放app编译时SDK 版本号,主要是为将来大概进级,做版本识别。

  sdk代码片断:

  虚拟机代码片断:

  if (result == 0×01) {

  Exit 实现道理:

  __root __xdata __no_init static unsigned char Communicate[4*1024]@0xEFFF;

  return 0;

  应用sdk代码片断:

  __root __xdata __no_init static unsigned char Result[2]@0xEFFD;

  首先看代码实现(官方代码是在IAR for 8051 上开拓,差异的编译器大概写法纷歧样)

  Result[1] = (unsigned char) ((tep >> 8) & 0xFF);

  讲解:

  讲解 :

  __noreturn void __VmExit(EXIT_CODE tep) {

  传统8051没有exit接口,可是在我们虚拟机必必要有,并且需要异常恶化正常两种退出方法。

  RET_DEFINE retdata = CallExternalFunc(methodID, ipara, pVmEvn);

  下面我们就来揭开其神秘的面纱,为满意智能合约特定的需求,对系统举办了一些改革如图:

  INT8U result = GetExRam(0xEFFD);

  ((void (*)(void)) (0×0012))();

  应用把退出code写入[email protected] 后直接call 0×0008, 虚拟机检测到PC指针指向00×0008后就间断应用的运行。

  0004H version

  }

  Code区

  }

  __root __code static const char version[]@0×0004 = {0×00,0×01,0×01};

  unsigned char *ipara = (unsigned char *) GetExRamAddr(VM_SHARE_ADDR);

  }

  }

  虚拟机复位后直接从0000h开始执行,读取LJMP后的地点直接跳转到app进口,由编译器自动生成。

  if (Sys.PC == 0×0012) {

   注:阅读此文需要您有必然的CPU硬件常识。

  Result[0] = (unsigned char) (tep & 0xFF);

  0000h LJMP 指令

  8051是哈弗布局的处理惩罚器,虚拟机把用不到的间断等成果去掉,只留下数据运算和处理惩罚部门,每一个应用开始运行前都需要加载到虚拟机ROM里,其数据布局必需如上图所示,不然虚拟机将直接判应用犯科,强制退出。

  if (Sys.PC == 0×0008) {

  虚拟机是实现智能合约系统最为要害和焦点的技能,智能坊虚拟回收虚拟成熟的8051处理惩罚器的方案满意了系统的需求,同时可以直接利用成熟不变的贸易编译器(iar for 8051、keil for 8051 ),为系统的开拓节减了大量时间。

QQ截图20150410161240

  }

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读