V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ibudao
V2EX  ›  分享创造

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

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


    虚拟机点赞…… 不过你这个好像 pcode =,=
    ibudao
        19
    ibudao  
    OP
       2014-11-26 14:01:08 +08:00
    @bcxx 仅仅作为一个starter的VM。。
    ffffwh
        20
    ffffwh  
       2014-11-26 14:30:45 +08:00
    这叫计算机**原理。程序语言原理是更加偏向数学、逻辑的那种东西。
    ibudao
        21
    ibudao  
    OP
       2014-11-26 14:47:47 +08:00
    @ffffwh 程序语言原理是我的最终目的,这个东西仅仅是第一步,如果不了解计算机**原理,谈何实现一个高级语言虚拟机呢。对我来说,直接啃那些程序语言原理的书效果太差,所以才打算边coding边学习。如果兄台有好的方式,还请不吝赐教。
    hansnow
        22
    hansnow  
       2014-11-26 15:08:23 +08:00 via Android
    @ibudao 真的很感兴趣!
    jeansfish
        23
    jeansfish  
       2014-11-26 15:49:17 +08:00
    有本书《自己动手写操作系统》
    bcxx
        24
    bcxx  
       2014-11-26 16:42:25 +08:00
    @ibudao pcode 很简单的啊……
    liuzhedash
        25
    liuzhedash  
       2014-11-26 18:22:56 +08:00
    http://bellard.org/jslinux/
    这个也可以看一下
    leiliang
        26
    leiliang  
       2014-11-26 18:28:14 +08:00
    没人想过把这个做成一个游戏吗?@ibudao
    deben
        27
    deben  
       2014-11-27 08:58:37 +08:00
    @ibudao 非常赞同你这个思路
    把51放进FPGA的时候,才真正算是明白单片机里面是怎么跑的
    再多的理论,也不如自己操作一次
    ibudao
        28
    ibudao  
    OP
       2014-11-27 09:55:58 +08:00
    @leiliang 想有想法啊,不过感觉不太好弄
    jedihy
        29
    jedihy  
       2014-11-29 09:44:22 +08:00
    这个是哪种汇编呀,怎么跟我常用的不一样?
    husinhu
        30
    husinhu  
       2014-11-29 17:20:45 +08:00
    +1 for mentioning fabrice bellard.
    js实现,考不考虑浮点数,还是只支持整型运算,会不会模拟浮点寄存器
    ibudao
        31
    ibudao  
    OP
       2014-12-01 09:17:32 +08:00
    @jedihy 指令集不一样,所以汇编也不一样。这是个简易版本
    ibudao
        32
    ibudao  
    OP
       2014-12-01 09:19:35 +08:00
    @husinhu 只支持整型,浮点的话看后期有没必要了
    yymdude
        33
    yymdude  
       2015-03-27 05:57:18 +08:00
    @ibudao 设计编程语言,必须懂指令集么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3578 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:52 · PVG 18:52 · LAX 02:52 · JFK 05:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.