问题标签 [stack-machine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
67 浏览

haskell - 如何使用 Data.SBV 来帮助导出正确的堆栈机器实现?

Graham Hutton,在 Haskell 编程的第 2 版中,最后两章讨论了基于堆栈机器的 AST 实现这一主题。最后,他展示了如何从AST的语义模型中推导出该机器的正确实现。

我试图Data.SBV在推导中寻求帮助,但失败了。

我希望有人可以帮助我了解我是否:

  1. 要求一些Data.SBV不能做的事情,或者
  2. 要求Data.SBV可以做的事情,但要求不正确。

我们得到:

发生了什么?!好吧,也许,要求 SBV 解决谓词(即 - )
以外的任何问题都行不通?a -> Bool

0 投票
1 回答
67 浏览

c# - 使用 Stack 机器用 Brouncer 公式逼近 PI

我正在研究如何翻译这个公式以获得 PI 的近似值(基于 Brouncer's)到堆栈机器。

我正在使用的公式4/(1 + 1^2/(2 + 3^2/(2 + 5^2/(2 + 7^2/(2 + 9^2/2)))))大约是 2.97。我怎样才能把它翻译成堆栈机器代码?

这是我到目前为止所拥有的,但它是错误的:

(说明从下到上阅读)

它以 4 除以 4.0909 结束,但它应该将 4 除以 1.344。那里有一些数学语法是错误的,但我试过了,还没有弄清楚我错在哪里......

如果需要,这是我为阅读说明而构建的类,它在 C# 中,但应该被广泛理解:

编辑:我解决了这个问题。我的数学语法一团糟。正确的堆栈机是:

0 投票
1 回答
145 浏览

assembly - 这些是这些堆栈操作的最小可能的 x86 宏吗?

我正在制作一个基于堆栈的语言作为一个有趣的个人项目。所以,我在堆栈上有一些有符号/无符号的 32 位值,我的目标是编写一些在这个堆栈上运行的汇编宏。理想情况下,它们会很小,因为它们会被大量使用。由于我是 x86 程序集的新手,我想知道你们是否有任何可以想到的提示或改进。非常感谢您的时间,谢谢!

注意:在宏展开后会使用优化器来避免这样的情况,pop eax; push eax所以不用担心!

0 投票
1 回答
107 浏览

assembly - 为什么即使包含 JUMPDEST 也无法跳入指令?

这是我的整个程序。其背后的原因是以太坊上的程序越大,加载它的成本就越高(因为每字节的gas成本非常高)。

所以我要跳进去PUSH3 0x5b6000,但如果我们拆解0x5b6000,那就意味着

因此,由于 evm 操作码编码是完全可变长度的(并且所有指令在 PUSHxx 旁边都是一个字节长)并且我正在跳转到 a JUMPDEST,为什么这个事务会失败?

黄皮书的什么地方规定,去aJUMPDEST不是有效跳转目的地的唯一要求?

0 投票
1 回答
347 浏览

assembly - 汇编语言中的PUSH指令是零地址指令还是一地址指令?

我读到在堆栈中实现的 ADD 和 MUL 指令是零地址指令,但是没有任何地方讨论 PUSH 和 POP 指令是一个地址指令还是零地址指令。以下是莫里斯·马诺 (Morris Mano) 的计算机体系结构的摘录: 在此处输入图像描述

它在我们的考试中被问到并被回答为零地址指令,但我很确定它必须是一个地址指令。请有人帮忙。

0 投票
0 回答
18 浏览

stack-machine - Stack Machines 和 3AC Machines 如何解决表达式?

所以,我在 Stack Machines & 3AC (Register) Machines 如何解释表达式方面有点挣扎。以这个表达式为例:

4 * 2 - 3

作为 3AC 机器(指令集具有三操作数,一种寄存器寄存器机器),我认为它看起来像这样

(注意 - 我使用 '#' 表示注释,很确定这不是正确的语法):

LOAD 4, r 0 #寄存器0存储4

LOAD 2, r 1 #寄存器1存储2

MUL r 0 , r 1 , r 0 # 寄存器 0 现在存储 8 (4 x 2)

LOAD 3, r 1 # 寄存器 1 现在存储 3

SUB r 0 , r 1 , r 0 # 寄存器 0 存储 5 (8 - 3)

对不起格式。我不知道如何在代码块中获取下标。

我认为堆栈机器看起来像这样: