V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

如何理解栈式虚拟机中的栈?

  •  
  •   LeeReamond · 2021-08-13 14:49:03 +08:00 · 439 次点击
    这是一个创建于 1003 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前一段时间看了点文章学习了 wasm 的执行方式,它是一个栈式虚拟机,本身内部会有一个栈来控制短存数据,还有一个虚拟的内存可以用来做存储。

    我想问一下这个短存数据的栈,是否可以理解为这个虚拟机的寄存器?真实世界的 CPU 中有(或有过)类似的结构么?因为这个栈的大小似乎是没有一个太小的限制,所以似乎和限制数量的 x86 寄存器对不上

    2 条回复    2021-08-15 06:22:04 +08:00
    cpstar
        1
    cpstar  
       2021-08-14 23:55:13 +08:00
    可以把 EAX\EBX\ECX\EDX 作为深度为四的栈使用,
    PUSH=MOV EBX,EAX; MOV ECX,EBX; MOV EDX,ECX; MOV #ADDR,EDX;
    POP=MOV EDX,#ADDR; MOV ECX,EDX; MOV EBX,ECX; MOV EAX,EBX;
    大概是这样,脑袋中的汇编大概是 18 年前学的了。

    JVM 是基于栈的。我的硕士论文做的基于某个体系的 JVM,那个体系是基于栈的硬件结构,只是用 C 做了一个模拟器,没有实际进行电路设计。
    LeeReamond
        2
    LeeReamond  
    OP
       2021-08-15 06:22:04 +08:00
    @cpstar 感谢回复,不过深度为 4,单 pop 命令周期还这么多,感觉不太像是能把虚拟机对应到物理结构
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2748 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:59 · PVG 18:59 · LAX 03:59 · JFK 06:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.