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

2021-08-13 14:49:03 +08:00
 LeeReamond

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

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

440 次点击
所在节点    问与答
2 条回复
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
2021-08-15 06:22:04 +08:00
@cpstar 感谢回复,不过深度为 4,单 pop 命令周期还这么多,感觉不太像是能把虚拟机对应到物理结构

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

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

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

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

© 2021 V2EX