精易论坛

标题: 简单虚拟机的实现 [打印本页]

作者: 晴雯晴雯    时间: 2018-1-18 20:11
标题: 简单虚拟机的实现
本帖最后由 晴雯晴雯 于 2018-1-18 20:17 编辑
参考地址:
链接:https://www.zhihu.com/question/33084689/answer/58994758
需要有一定的汇编和计算机组成原理的知识
C++
int sum = 0;for (int i = 1; i != 101; i++)   
     sum += i;

易语言
.版本 2
.支持库 spec

.程序集 程序集1

.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 sum, 整数型
.局部变量 i, 整数型

.变量循环首 (1, 100, 1, i)
    sum = sum + i
.变量循环尾 ()
调试输出 (sum)
返回 (0)  ' 可以根据您的需要返回任意数值

类汇编
0000 ILD 2, 101   // 放立即数101到2号内存单元
0001 ILD 3, 1     // 放立即数1到3号内存单元
0002 ILD 1, 1     // 放立即数1到变量i
0003 ILD 0, 0     // 放立即数0到变量sum
0004 ICMP 1, 2    // 比较i和101
0005 [FEQ] IJMP 3 // 如果相等(i==101)就跳转到9,因为指令执行完ip为6,所以+3就到了9
0006 IADD 0, 1    // sum += i
0007 IADD 1, 3    // i++,3号位保存的就是1
0008 IJMP -5      // 跳转到4,因为指令执行完ip为9,所以减5就到了指令4
0009 IOUT 0       // 输出sum
0010 ISTOP        // 挂起

Note:要关掉 工具-系统配置-编译-编译时检查死循环


我们都知道,对于一个物理的处理器而言,他有自己的指令集,这些指令集可以认为是处理器众多功能部件的接口。
我们用编译器将编程语言写成的程序转换成与之等价的用指令集组成的序列表示的程序。
然后由物理机器读入这些指令序列并依次执行处理器相应的功能部件,于是程序就可以在物理机器上运行了。
而虚拟机本质上就是在物理之上再抽象出一个虚拟的机器,这个虚拟的机器有统一的指令集,我们只要将我们的源码翻译为虚拟机的指令集即可(类似于JAVA)。


这里我们用一个整数数组模拟内存,用ptr数据类型来模拟CS:IP寄存器的指针,并且人工写了对应的汇编。这是一个Demo,不是很完善,抛砖引玉吧。


附件[hide=d99999999] 虚拟机Demo3.rar (3.27 KB, 下载次数: 34) [/hide]


如果要写出一个实用的虚拟机来还要学习编译原理、垃圾回收(GC)、JIT相关等。




作者: jr21066    时间: 2018-1-18 20:33
感觉很神奇的样子.看看内容.

作者: a32092    时间: 2018-1-18 20:40
123123123123
作者: gaoqing    时间: 2018-1-18 20:55
来还学习下
作者: 梦想ol    时间: 2018-1-18 21:04
666666666666666666666666

作者: kagari    时间: 2018-1-18 21:23
666666666666666666666666
作者: xxhaishixx    时间: 2018-1-18 21:24
高手在民间
作者: 740949011    时间: 2018-1-18 22:17
我了看看,感觉很叼
作者: q23223514    时间: 2018-1-18 22:59
很棒 支持一下
作者: xslyhk    时间: 2018-1-19 09:13
很高级的样子啊
作者: dulang    时间: 2018-1-19 10:02
汇编太高深了
作者: 空丶城    时间: 2018-1-19 11:51
顶楼主啦..希望楼主多发精品好帖啦.....
作者: 扣扣    时间: 2018-1-19 13:22
感谢楼主的分享,学习一下

作者: 菜鸟杰西卡    时间: 2018-1-19 14:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: guilegui    时间: 2018-1-19 22:52
回复来看看
感谢分享
作者: CaomeiGG    时间: 2018-1-19 22:56

回复来看看
感谢分享
作者: qiuyingjia    时间: 2018-1-20 00:21
可以的,支持
作者: wqchat    时间: 2018-1-20 10:00
回复来看看
作者: 哥只是一个传说    时间: 2018-1-20 13:02
太高深了,听得一头雾水
作者: kiss0459    时间: 2018-1-20 21:57
能像虚拟机一样虚拟创建磁盘空间就知足了
作者: 1678895471    时间: 2018-1-21 23:27
完全看不懂啊
作者: 易友k    时间: 2018-1-29 20:41
太高深了,听得一头雾水
作者: 3170337582    时间: 2018-1-31 20:06
谢谢分享....................




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4