整了个简单的虚拟机,用来学习程序语言原理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ibudao
V2EX    分享创造

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

  •  1
     
  •   ibudao
    lujb 2014 年 11 月 26 日 6849 次点击
    这是一个创建于 4085 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近对程序语言原理感兴趣,读了些资料,整了个简单的基于寄存器的虚拟机,用来实践。虚拟机是16位的,只能运行简易版的汇编程序。为了更有趣,我用js实现的,这样就可以在web上跑~
    demo: http://lujb.github.io/starterVM#Demo
    code: https://github.com/lujb/starterVM

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


    虚拟机点赞…… 不过你这个好像 pcode =,=
    ibudao
        19
    ibudao  
    OP
       2014 年 11 月 26 日
    @bcxx 仅仅作为一个starter的VM。。
    ffffwh
        20
    ffffwh  
       2014 年 11 月 26 日
    这叫计算机**原理。程序语言原理是更加偏向数学、逻辑的那种东西。
    ibudao
        21
    ibudao  
    OP
       2014 年 11 月 26 日
    @ffffwh 程序语言原理是我的最终目的,这个东西仅仅是第一步,如果不了解计算机**原理,谈何实现一个高级语言虚拟机呢。对我来说,直接啃那些程序语言原理的书效果太差,所以才打算边coding边学习。如果兄台有好的方式,还请不吝赐教。
    hansnow
        22
    hansnow  
       2014 年 11 月 26 日 via Android
    @ibudao 真的很感兴趣!
    jeansfish
        23
    jeansfish  
       2014 年 11 月 26 日
    有本书《自己动手写操作系统》
    bcxx
        24
    bcxx  
       2014 年 11 月 26 日
    @ibudao pcode 很简单的啊……
    liuzhedash
        25
    liuzhedash  
       2014 年 11 月 26 日
    http://bellard.org/jslinux/
    这个也可以看一下
    leiliang
        26
    leiliang  
       2014 年 11 月 26 日
    没人想过把这个做成一个游戏吗?@ibudao
    deben
        27
    deben  
       2014 年 11 月 27 日
    @ibudao 非常赞同你这个思路
    把51放进FPGA的时候,才真正算是明白单片机里面是怎么跑的
    再多的理论,也不如自己操作一次
    ibudao
        28
    ibudao  
    OP
       2014 年 11 月 27 日
    @leiliang 想有想法啊,不过感觉不太好弄
    jedihy
        29
    jedihy  
       2014 年 11 月 29 日
    这个是哪种汇编呀,怎么跟我常用的不一样?
    husinhu
        30
    husinhu  
       2014 年 11 月 29 日
    +1 for mentioning fabrice bellard.
    js实现,考不考虑浮点数,还是只支持整型运算,会不会模拟浮点寄存器
    ibudao
        31
    ibudao  
    OP
       2014 年 12 月 1 日
    @jedihy 指令集不一样,所以汇编也不一样。这是个简易版本
    ibudao
        32
    ibudao  
    OP
       2014 年 12 月 1 日
    @husinhu 只支持整型,浮点的话看后期有没必要了
    yymdude
        33
    yymdude  
       2015 年 3 月 27 日
    @ibudao 设计编程语言,必须懂指令集么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2204 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 12:56 PVG 20:56 LAX 04:56 JFK 07:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86