C 语言编写的小型虚拟机:CarpVM

分享到:

CarpVM 是一个用 C 语言编写的小型虚拟机。可以嵌入在应用程序中使用。

包含的指令集有:

  • HALT (code): Halts and attempts to clean up stack, data memory, and label memory before exiting with given exit code.

  • NOP (): Does nothing. Seriously.

  • LOAD (reg, val): Loads given integer value into given register.

  • MOV (dst, src): Copies contents of src register into dst register.

  • ADD (): Pops the top two integers from the stack and pushes their sum.

  • SUB (): Pops the top two integers from the stack and pushes the difference (lower minus upper).

  • MUL (): Pops the top two integers from the stack and pushes their product.

  • MOD (rega, regb): Computes rega % regb and stores in ERX.

  • NOT (reg): Computes bitwise NOT of reg and stores in reg.

  • XOR (): Pops the top two integers from the stack and XORs them.

  • OR (): Pops the top two integers from the stack and ORs them.

  • AND (): Pops the top two integers from the stack and ANDs them.

  • INCR (reg): Increments value in given register.

  • DECR (reg): Decrements value in given register.

  • INC (): Increments the value at the top of the stack.

  • DEC (): Decrements the value at the top of the stack.

  • PUSHR (reg): Pushes value in given register.

  • PUSH (val): Pushes given value.

  • POP (val): Pops an integer from the stack and dumps it into GBG.

  • CMP (): Pops the top two integers from the stack and checks if equal. 0 means equal. Result will be pushed onto the stack.

  • MOV (rega, regb): Move value in rega to regb.

  • JZ (addr): Jumps to given absolute address if top of the stack is 0.

  • RJZ (diff): Adds differential to current EIP (relative jump) if top of the stack is 0.

  • JNZ (addr): Jumps to given absolute address if top of the stack is not 0.

  • RJNZ (diff): Adds differential to current EIP (relative jump) if top of the stack is not 0.

  • JMP (addr): Jumps to given absolute address.

  • RJMP (diff): Adds differential to current EIP (relative jump).

  • DBS (key, val): Sets data memory at key (string pointer) to given value.

  • DBG (key, reg): Gets value from data memory at key (string pointer) and dumps it into given register.

  • CALL (key, nargs): Save state and set EIP to value in data memory at key.

  • RET (val): Push return value and load state.

  • PREG (reg): Prints contents of given register.

  • PTOP (): Peeks top of stack and prints top value.

项目主页:http://www.open-open.com/lib/view/home/1407202369348

昵    称:
验证码:

相关文档:

  • Java 中嵌入c/c++
    Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。...
  • 轻量级的 C++ 库:GNU uCommon
    GNU uCommon 是一个轻量级的 C++ 库,使用 C++ 设计模式,适合用于嵌入式应用的开发,例如使用 uClibc 和 POSIX 线程支持。为了这个目的,UComm...
  • 开源C编译器 UCC
    ucc是一款遵从ANSI C89标准的编译器,大约15,000行C代码。目前支持x86平台上的...
  • C++ 库:Libexecstream
    Libexecstream 是 C++ 库,允许你运行一个子进程并且获取进程的输入,输出和错误,类似标准 C++ 流。...
  • C++之父谈关于C++的五个需要被重新认识的观点(中)
    概述:学习和使用过C++的人几乎都曾经听说过下面的五个关于C++的描述,并且对这些话笃信不已,那么现在的情况是怎么样的呢?本文的...
  • 微软开源 C++ REST SDK
    C++ REST SDK 包含在 Casablanca 项目中。 Casablanca 是一个 C++ 本地库,旨在帮助开发者的 C++ 应用程序访问云服务。如果你想编写一个响应式的...
  • C++指针的概念解读 超详细
    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,...
  • 嵌入式GLIBC EGLIBC
    Embedded GLIBC (EGLIBC) 是 GNU C Library (GLIBC) 的一个变种,用于工作在嵌入式的系统中。EGLIBC 严格兼容二进制的 GLIBC 。...
  • 开发者都应该使用的10个C++11特性
    在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++...
  • C/C++命名风格
    存在C/C++中的四种命名风格: 帕斯卡(Pascal)命名法 将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更...
  • 高性能的 URL 路由C语言开发包:R3
    R3是一个URL路由分发开发库,拥有较高的性能。采用C语言实现。可将你的路由规则编译成前缀树。 在启动时利用构造前缀树,你可以高...
  • C++对象池:C++ ResourcePool
    C++ ResourcePool 是一个C++语言开发的通用的对象池,提供一个独立的类型无关的API。...
  • C++ Resources Compiler - 生成 C++ 源码文件
    C++ Resources Compiler 是一个工具,用来生成一个 C++ 源码文件,包括相应的头文件,用以嵌入任意数据文件并提供一个 Resource 类用来访问这...
  • 基于Accelerate框架的 API:Surge
    Surge是一个基于Accelerate框架和C语言开发,用于进行矩阵运算、数学信号处理和图像处理的API。换句话说,就是可以非常快速的处理数学...
  • VC++的数据库访问封装库 exdb
    封装了 VC 数据库 sql 语句、存储过程操作; 方便得到数据库返回值; 3.支持 Sqlserver、Oracle,后续将继续更新支持更多; 4.VC 面向接口设计;...
  • C语言编译器 Cilk
    Cilk多线程编程技术最早由MIT开 发,是一个基于Gcc编译器的开源项目。后来开发者创建了一个创业公司,推出改进的私有版本,整合到Wind...
  • C++日志程序库:RLog
    RLog是一个灵活的C++日志程序库。RLog高度优化了不用实际输出Log信息的分支,因此RLog可以留在发布产品中,并可以按需开启输出。...
  • C++11 多线程:数据保护
    在编写多线程程序时,多个线程同时访问某个共享资源,会导致同步的问题,这篇文章中我们将介绍 C++11 多线程编程中的数据保护。...
  • 将二进制文件加到C源码中的工具包:incbin.bat
    有时你需要将二进制数据嵌入至C / C++程序。 INCBIN是一个跨平台的工具,刚好用来做到这一点。不像其他的解决方案,INCBIN是使用操作系...
  • C&C++同步I/O库 libaio
    libaio 包的作用是为了支持同步I/O。对于数据库之类的系统特别重要。...