CarpVM 介绍
CarpVM 是一个用 C 语言编写的小型虚拟机。可以嵌入在应用程序中使用。
包含的指令集有:
-
HALT (code): Halts and attempts to clean up stack, data memory, and label memory before exiting with given exit code.
-
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.
CarpVM 官网
https://github.com/tekknolagi/carp
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。