问题标签 [gforth]

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 回答
222 浏览

c - gforth 用字符串调用 C 函数 printf

我正在printf使用S" ..."字符串调用 C 函数,但遇到了无效的内存地址。将指向在 Forth 端创建的以空字符结尾的字符串的指针传递给 C 的正确方法是什么?

这是 hello world in 的两个版本gforth,一个使用专用语法来写出文字字符串,另一个使用type存储为值的字符串(尽管很简单)

这里是helloworld.fs

helloworld2.fs

据我所知,该语法S" Hello, world"在 Forth 运行时的某个全局区域中创建了一个新字符串,并将指向它的指针压入堆栈。它也可能是一个比这更丰富的对象,我不知道 Forth 是否使用以空字符结尾的字符串。

在任何情况下,都gforth暴露了一些用于调用 C 函数的词,这里在hello_world_c.fs

我希望这个脚本hello在运行时打印然后换行。该函数的原型printfa -- n... 意味着它接受一个地址并返回与int. 单个格式字符串绝对是一个可接受的参数集合,可以传递给printf.

但是,它会产生错误:

我猜这里的问题来自这样一个事实,S" hello"它不是真正的指针,而是实际上是别的东西。有没有办法将它转换为指针,以便调用printf将指向正确的东西?

0 投票
1 回答
260 浏览

random - Gforth 随机生成器没有种子

gforth 中的以下程序打印出 0 到 2 之间的 10 个随机数:

问题是,每次开始后,数字都是一样的。这意味着没有使用 time(0) 种子。如何获得每次开始时不同的随机数?

0 投票
2 回答
298 浏览

forth - GForth:将浮点数转换为字符串

一个简单的问题,结果却很复杂:

如何在 GForth 中将浮点数转换为字符串?所需的行为如下所示:

0 投票
0 回答
65 浏览

gforth - 如何从解释器内部保存 gforth 图像

在解释器中创建单词后,如何在发出“再见”之前保存图像?

我试过'gforthmi test.fi'和'gforthhmi test.fi test.asm'。

我正在使用以下文件作为文档: https ://people.cs.clemson.edu/~steve/CW/428/PBL%20Pages/gforth.pdf 还有“Starting Forth”和“Thinking Forth”。

gforth 的版本是 0.7.3,在 MacOS 上从源代码重新编译。

0 投票
1 回答
147 浏览

gforth - 如何在 Forth 中构建素数生成器?

我的目标是在 Forth 中构建一个素数生成器。不是 Eratosthenes 的筛子,而是两个嵌套循环,它们对数字 A 和数字 B 的所有组合进行暴力破解。在源代码中,我对循环有一个词,用于测试条件是否为真,并尝试进行嵌套循环。但是在使用 gforth 执行代码后,会显示堆栈下溢错误。也许某处缺少某种 dup,但循环中的 i 和 j 索引也有可能是错误的。问题是,如果我更改代码中的某些内容,堆栈就会不同。这意味着,在将 for 循环的索引号放到屏幕上之后,就无法再访问该数字了。我还发现很难访问变量,因为 Forth 似乎根本没有变量。所以我创建了一个辅助变量,

我知道,代码看起来有点混乱,有人可以帮忙吗?

0 投票
1 回答
634 浏览

include - 如何在 Forth 中包含 C 库

默认情况下,Forth 只有少量的工作库,所以一切都必须从头开始编程。原因是,基于堆栈的 Forth 虚拟机将自己标识为一个超薄系统。

根据 Gforth 手册,可以使用现有的 C 库并访问用 C 编写的预编译图形库和游戏引擎。在可以将 C 库包含在 Forth 中之前,最好在正常情况下测试库C项目。

我从头开始用 C 创建了一个库。它提供了一个添加功能,可以从主程序中调用。这些文件被编译和链接,它工作正常。

计划是使用这个来自 Forth 的预编译 c 库。Gforth 编译器为此提供了一个特殊的关键字,用于连接 Forth 程序和 C 库。不幸的是,我收到一条错误消息,指出找不到该库。即使手动将其复制到 Gforth 文件夹后,错误消息也不会消失。

“Forth-to-C 接口”有什么问题?

0 投票
1 回答
323 浏览

forth - 如何在 Forth 中转储一个单词?

目的是在字典中创建一个 Forth 单词,然后打印出该单词的记忆内容。第一步很容易。这个: main词的创建方式如教程中所述。创建单词后,字典指针移动到下一个位置,所以我必须从中减去一些项目,现在可以转储创建单词的内存区域:

不幸的是,dump 命令显示的内存区域没有以开头的部分,: main并且单词1 dup ...中的语句也丢失了。那么这个新创造的词到底在哪里呢?如何查看内存中的原始字节?

0 投票
2 回答
546 浏览

gforth - 如何在 GForth 中保存程序/单词

有没有办法将我定义的单词保存到文件中,以便以后继续试验?

到目前为止,我找到了从控制台复制+粘贴定义的唯一方法,如果它们仍然可见的话。


我是从头开始的,所以我犯了很多错误并在以后更正它们,我想保存我之前定义的单词并在下一个会话中重复使用它们。

这是一个简单的例子:

现在我有工作hello(最后有空格)和工作2hello(使用编辑hello) - 可以说,我有更多的麻烦来解决2hello定义形式和定义hello现在不在屏幕上。

  1. 有没有办法保存hello并保存2hello到文件中,我可以在第二天使用它来制作更复杂的单词?
  2. 它可以是文本文件吗,所以我可以使用一些编辑器(比如vim)来清理所有错误的定义并评论那些我想保留的?

我想以文件welcome.fth 结束:

第二天就能来,继续发现

0 投票
1 回答
222 浏览

forth - 使用局部变量进行浮点计算

在 Forth 中,可以使用单独的浮点堆栈进行除法和乘法运算。计算 3/4 的典型示例是:

这是0.75。但是,如果计算是在一个单词中完成的,使用局部变量会发生什么呢?

看起来,Forth 期望整数堆栈中的值是空的,因为在函数调用之前,变量被放入了浮动堆栈。问题是如何以某种方式修改计算字,即局部变量取自浮点堆栈?

0 投票
1 回答
289 浏览

forth - J1 Forth CPU程序理解

我真的觉得J1 Forth CPU编程很难理解。

我对 Forth 有基本的了解,但我无法理解 J1 Forth 编程中定义的词语,例如 d# 和 h#……以及它是如何处理 I/O 外围设备的?