整了个简单的虚拟机,用来学习程序语言原理

2014-11-26 10:35:30 +08:00
 ibudao
最近对程序语言原理感兴趣,读了些资料,整了个简单的基于寄存器的虚拟机,用来实践。虚拟机是16位的,只能运行简易版的汇编程序。为了更有趣,我用js实现的,这样就可以在web上跑~
demo: http://lujb.github.io/starterVM#Demo
code: https://github.com/lujb/starterVM

当然,我会一直完善(下一步计划实现一个小型的c)。通过动手实现,我发现这个过程对程序语言原理的理解大有裨益。所以我希望有类似兴趣的同学一起来探讨,大家共同升技能。
6290 次点击
所在节点    分享创造
33 条回复
iscraft
2014-11-26 10:43:41 +08:00
不明觉厉啊
hansnow
2014-11-26 10:48:04 +08:00
赞!最近在学微机原理,感觉很有帮助啊
deben
2014-11-26 10:52:10 +08:00
搞个4块钱的51单片机,用汇编来写程序不是更爽?哈哈!
ibudao
2014-11-26 10:54:07 +08:00
@hansnow 可以参与进来啊,动手实现真的对其中原理的理解很有帮助。
ibudao
2014-11-26 10:56:54 +08:00
@deben 汇编不是目的,了解其中的运行原理才是我的本意啊。c代码也是先编译成汇编再运行的,所以下一步是实现一个高级语言来写程序。
Mutoo
2014-11-26 11:35:43 +08:00
s51431980
2014-11-26 11:35:48 +08:00
楼主是看什么书整的,我也看了一些编译和程序语言的书,但没有做出过一点东西来
ibudao
2014-11-26 11:41:02 +08:00
@Mutoo 很有意思的项目,它是模拟的游戏机,不过我更偏向于程序语言虚拟机。
wcp1231
2014-11-26 12:01:42 +08:00
大学完全没接触过汇编,想入手这个项目需要什么知识不?还是我直接去看代码就好了?
madeye
2014-11-26 12:07:03 +08:00
ibudao
2014-11-26 12:23:01 +08:00
@s51431980 经典的书在豆瓣上看排行就能找到,不过我倒是推荐你一些类似自制操作系统/编程语言的书,以及一些小型的项目,如:c4,tinyvm,因为这些更容易驱动你动手实践。
ibudao
2014-11-26 12:26:29 +08:00
@wcp1231 如果你能看懂js的话就直接看代码,因为核心就是围绕fetch-decode-execute来的,很多代码都是相似的。之所以有汇编是因为总不能拿数字写程序吧。如果有不明白的地方,我很乐意跟你一起探讨。
jiang42
2014-11-26 12:28:29 +08:00
程序语言原理不用虚拟机也能学-。-
ibudao
2014-11-26 12:33:10 +08:00
@jiang42 只是一种方式,哈哈,我的目的是实现一个高级语言虚拟机。
wcp1231
2014-11-26 12:40:27 +08:00
@ibudao 我就是汇编一点都不懂。。
feiyuanqiu
2014-11-26 13:10:14 +08:00
好厉害,我还知道一个js写的x86虚拟机 http://copy.sh/v86/
同样想了解下楼主看的什么书?
我之前买了 csapp、汇编语言、Orange S:一个操作系统的实现,一直没时间看,感觉自己离底层好遥远,看了没什么用处...
ibudao
2014-11-26 13:27:20 +08:00
@feiyuanqiu 我也买了这些书,类似的还有 程序员的自我修养,自制操作系统等,大部分也没时间看。其实如我在13楼说的,你需要的是迈出第一步:动手写,哪怕是最基本的功能。在实现的过程中你肯定还会回来翻这些书的,到时你就知道用处了。其实我写的这个就是相当简单,并且我是参考b32的指令集来实现的,一点也不复杂,你可以试试。
bcxx
2014-11-26 13:29:46 +08:00
@feiyuanqiu 代码写得少才会觉得这些知识点太底层没用…… = =


虚拟机点赞…… 不过你这个好像 pcode =,=
ibudao
2014-11-26 14:01:08 +08:00
@bcxx 仅仅作为一个starter的VM。。
ffffwh
2014-11-26 14:30:45 +08:00
这叫计算机**原理。程序语言原理是更加偏向数学、逻辑的那种东西。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/149341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX