SectorForth:适合引导扇区的16位x86 Forth

2020-09-27 23:08:43

编写SectorForward的灵感来自1996年Usenet的一个帖子(特别是Bernd Paysan在这个帖子上的第一篇帖子)。

SectorForth仅包含上述Usenetpost中概述的八个原语、用于操作内部状态的五个变量和两个I/O原语。

有了这个最小的构建块集,用于分支、编译、操作返回堆栈等的单词都可以用Forth本身编写(查看示例!)。

冒号编译器(:)可用,因此可以轻松定义新词(当然,这意味着;也在那里)。

与许多Forth实现相反,SectorForth不会尝试将未知词转换为数字,因为可以使用可用的原语生成数字。包含的两个I/O原语足以编写功能更强大的可以解析数字的解释器。

SectorForth是使用NASM 2.15.01开发的。早期版本的NASM可能能够编译它,但这还没有经过测试。

这将在其引导扇区中生成一个编译后的二进制文件(sectorfor.bin)和一个包含该二进制文件的软盘映像(sectorfor.img)。

DEBUG在调试模式下启动QEMU,并暂停执行。这允许您在gdb中设置远程目标(target remote localhost:1234),并在SectorForth开始运行之前设置任何您想要的断点。

每行最多可以输入4KB的输入。按下Return键后,解释器一次解析一个单词并解释它(即执行程序根据状态变量的当前值编译它)。

SectorForth不会打印Forth用户熟悉的ok提示符。但是,如果在字典中找不到单词,错误消息!!将以红色打印,让您知道发生了错误。

当在词典中找不到单词时,翻译器的状态将被重置:清除数据和返回堆栈以及终端输入缓冲区,并将翻译器置于翻译模式。其他错误(例如,编译单词定义中的无效地址并试图执行该地址)处理不当,会使解释器崩溃。

如果您不熟悉Forth是如何在x86上实现的,请阅读Richard W.M.Jones的汇编代码。

SectorForth从前面的文章中获得了很多灵感,但后者在解释评论中的基本原理方面做得要好得多。

有关线程代码技术以及如何在不同架构中实现Forth的优秀介绍,请阅读Brad Rodriguez的Moving Forth。