Berry 指令设计
Berry 脚本源代码需要被编译为字节码指令流才能被 Berry 虚拟机执行。本文将详细地讲解 Berry 字节码指令(下面简称指令)的设计和实现。为了达到这个目的,本文由 3 部分构成:第 1 小节会描述指令的组成,以便让读者了解 Berry 字节码的二进制编码方式;第 2 小节简述在脚本的执行过程中,字节码如何生成并被执行;第 3 小节则通过对 Berry 源代码的分析说明字节码指令如何编码以及解码。解释器源码中对指令的定义可以参考 be_opcode.h 文件。
指令的构成
一条指令占用 4 个字节,也就是一个 32 位的整数,准确地说应该是 32 位的无符号整数。一条指令由操作码(Operation Code)和若干操作数构成,不同操作码的指令可以有不同的操作数成分。任何情况下,指令可能是以下几种情况:
Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 |
---|---|---|---|---|
OP: 6 bits | OP: 6 bits | OP: 6 bits | OP: 6 bits | OP: 6 bits |
A: 8 bits | A: 8 bits | A: 8 bits | sAx: 26 bits | Ax: 26 bits |
B: 9 bits | sBX: 18 bits | Bx: 18 bits | --- | --- |
C: 9 bits | --- | --- | --- | --- |
其中模式 1 和模式 2 比较常用,模式 4 和模式 5 目前没有用到。在所有几种模式中,一条指令的 32 位被分为不同的字段,例如模式 1 中被分为 6 位的 OP 字段,8 位的操作数 A 字段,9 位的操作数 B 字段以及 9 位的操作数 C 字段。
每种字段都有一个名字,以下是各字段名称的含义:
字段 | Bits | 说明 |
---|---|---|
OP | 31:26 | 操作码(下面简称 opcode 或者 OP),最多可容纳 64 种操作码 |
A | 25:18 | 无符号操作数 A,一般用于表示寄存器的索引,取值范围为 0 ~ 255 |
B | 17:9 | 无符号操作数 B,一般用于表示寄存器或者常量的索引,取值范围为 0 ~ 511 |
C | 8:0 | 无符号操作数 C,一般用于表示寄存器或者常量的索引,取值范围为 0 ~ 511 |
sBx | 17:0 | 有符号操作数 sBx,取值范围为 -13072 ~ 13071 |
Bx | 17:0 | 无符号操作数 Bx,取值范围为 0 ~ 262143 |
sAx | 25:0 | 有符号操作数 sAx,取值范围为 -33554432 ~ 33554431 |
Ax | 25:0 | 无符号操作数 Ax,取值范围为 0 ~ 67108863 |
注意:指令字段并不是任意组合的,只能按上面表中的模式 1 到模式 5 中的 5 种方式组合。
B、C 指令具有 9 bit 的位宽,这个特性使得它们可以用来索引所有的寄存器(Berry 虚拟机中最多有 256 个寄存器)和前 256 个常量,这在一些操作中非常实用。
现在我们通过一个简单的例子来说明指令的二进码:假设一条指令的 opcode 为 12,操作数 A 为 50,操作数 B 为 32,操作数 C 为 1,则该指令的编码计算过程为:
ins = (12 << 26) | (50 << 18) | (32 << 9) | 1
= 0x30C84001
= 00000001,11011000,11000111,01000001 (bin)
该指令的操作数组合是 A、B、C,因此它是一个模式 1 指令。这种模式非常常见,例如所有的二元运算(binary operation)指令都是模式 1 指令。
后面,我们将使用下列方式来描述一条完整的指令:
OP A B C ; 表示 Mode 1 指令
OP A sBx ; 表示 Mode 2 指令
OP A Bx ; 表示 Mode 3 指令
OP 可以用具体的操作码来代替,例如加法的 ADD 操作码。在说明了指令格式的前提下,也可以使用实际值带入 A、B、C 等操作数。由于 Mode 4 和 Mode 5 几乎没有实际使用,我们也没有必要说明
Berry 指令设计的更多相关文章
- 基于ARM处理器的反汇编器软件简单设计及实现
写在前面 2012年写的毕业设计,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性 ...
- 3.6 MIPS指令简介
计算机组成 3 指令系统体系结构 3.6 MIPS指令简介 MIPS秉承着指令数量少,指令功能简单的设计理念.那这样的设计理念是如何实现的呢?在这一节,我们就将来分析MIPS指令的特点. 相比于X86 ...
- AngularJs 第一个自定义指令编写
公司在做一个OA系统, 包括移动端(从微信企业号进入OA系统),电脑端. 电脑端还是用的传统的easyui做界面,asp.net mvc作为服务端.这个技术已经很成熟了配合权限框架很快就能开发出来.但 ...
- Vue指令实现原理
前言 自定义指令是vue中使用频率仅次于组件,其包含bind.inserted.update.componentUpdated.unbind五个生命周期钩子.本文将对vue指令的工作原理进行相应介绍, ...
- cpu指令如何读写硬盘
我们提到cpu的主要作用之一就是控制设备之间的数据交互.这其中自然也包括了硬盘.系统的所有数据基本都在硬盘中,所以知道怎么读写硬盘,对程序来说非常重要,所以我们先来探索下传说中的pio模式. cpu要 ...
- [原] KVM 虚拟化原理探究(3)— CPU 虚拟化
KVM 虚拟化原理探究(3)- CPU 虚拟化 标签(空格分隔): KVM [TOC] CPU 虚拟化简介 上一篇文章笼统的介绍了一个虚拟机的诞生过程,从demo中也可以看到,运行一个虚拟机再也不需要 ...
- 转一下关于struct字对齐的原因
作者:張道遠链接:https://www.zhihu.com/question/27862634/answer/38506197来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- [整理]AngularJS学习资源
https://angular.io/docs/js/latest/(2.0官方网站) http://www.linuxidc.com/Linux/2014-05/102139.htm(Angular ...
- 【网络——Linux】——IPMI详细介绍【转】
一.IPMI含义 智能平台管理接口(IPMI:Intelligent Platform Management Interface)是一项应用于服务器管理系统设计的标准,由Intel.HP.Dell和N ...
随机推荐
- 代码编译与反编译 (.py文件与.pyc文件互转)
# 将.py文件转化为.pyc文件,实现代码隐藏的需要,转化后的.pyc文件将在当前目录的__pycache__文件夹下. # .pyc文件的使用与.py文件的使用相同. .py -> .pyc ...
- [轉]Linux 2.6内核笔记【内存管理】
4月14日 很多硬件的功能,物尽其用却未必好过软实现,Linux出于可移植性及其它原因,常常选择不去过分使用硬件特性. 比如 Linux只使用四个segment,分别是__USER_CS.__USER ...
- Darknet YOLOv3 on Jetson Nano
推荐比较好的博客:https://ai4sig.org/2019/06/jetson-nano-darknet-yolov3/ 用的AlexeyAB的版本,并且给出了yolov3和tiny的效果对比. ...
- 最新版react16.9中按需加载antd和使用less
使用create-react-app创建应用 yarn create react-app my-app cd my-app yarn start 引入 antd 这是 create-react-app ...
- opensns的URL模式
URL模式 如果我们直接访问入口文件的话,由于URL中没有模块.控制器和操作,因此系统会访问默认模块(Home)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的: htt ...
- Ansible 和 Playbook 暂存
Ansible 和 Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单 HOST Inventory 模块插件 Playbooks 查看ansible的目录结构 ...
- 文件对比工具 diff cmp patch(没弄完) pr
diff不仅可以对比文件,而且可以对比文件夹中的文件. 解析: diff用在比对两个文件的差异,并且是以行为单位进行对比.一般用在ascii纯文本档的对比上. 例 在tmp中创建一个testpw文件夹 ...
- Aajx调用千千音乐数据接口
前端展示截图https://images.cnblogs.com/cnblogs_com/LiuFqiang/1429011/o_D09Q55)EL1VFEIJ(GKI%7D%7DY5.png < ...
- hdu 5792 线段树+离散化+思维
题目大意: Given a sequence A with length n,count how many quadruple (a,b,c,d) satisfies: a≠b≠c≠d,1≤a< ...
- 如何重置Magento管理用户、角色和资源的权限
场景1:所有的资源权限被设置为管理角色 步骤1:获取当前的管理角色详细信息 SELECT * FROM admin_role WHERE role_name = 'Administrators' /* ...