编码尝试:使用Brainfuck实现Brainfuck解释器 - 如何写一个引导程序?
- 内容介绍
- 文章标签
- 相关推荐
问题描述:
这是一篇分帖,主帖请见:
编码尝试:使用Brainfuck实现Brainfuck解释器 - 开发调优 - LINUX DO
前水言
终于从无穷无尽的ddl里面解脱出70%了,能有点时间继续写了!
先来给佬u们贴个成果截图:
自举自举自
f22f83f7a96966ab19835b47de6579ea2021×1006 188 KB
总共套了4层:
最外层是 @so1ve 开发的BrainFrost。(BF→x86-64机器码编译器)
第二层是以16777216位长,16栈深构建的解释器。
第三层是以480位长,16栈深构建的解释器。
第四层是一个小小的echo程序。
太爽辣! >w<
好了,说回正文:Boot
主帖中说到,这个Boot需要这些功能:
- 读取指令直到指令终止符。
- 重新编码指令以加速后面的运行。
- 将指令逆序写入
.text段。 - 这一条是什么,滚木吗?
我们来分析一下实现:
- 逆序写入是最简单的,只需要确保每一次有效输入之后会多执行一个
<,我们就能左移一格。 - 主循环,稍难一点,它会一直执行直到读取到我们规定的终止符
~。 - 一个巨大的类switch结构,这个最难,它负责识别不同的指令,并执行对应的逻辑。
- 一个重编码指令的逻辑,这玩意超级考验设计。
1. 内存分配
首先,我们需要一大堆的>,用来把指针移动到整个程序段的最右边,这些>的个数就是解释器程序段的大小。
问题描述:
这是一篇分帖,主帖请见:
编码尝试:使用Brainfuck实现Brainfuck解释器 - 开发调优 - LINUX DO
前水言
终于从无穷无尽的ddl里面解脱出70%了,能有点时间继续写了!
先来给佬u们贴个成果截图:
自举自举自
f22f83f7a96966ab19835b47de6579ea2021×1006 188 KB
总共套了4层:
最外层是 @so1ve 开发的BrainFrost。(BF→x86-64机器码编译器)
第二层是以16777216位长,16栈深构建的解释器。
第三层是以480位长,16栈深构建的解释器。
第四层是一个小小的echo程序。
太爽辣! >w<
好了,说回正文:Boot
主帖中说到,这个Boot需要这些功能:
- 读取指令直到指令终止符。
- 重新编码指令以加速后面的运行。
- 将指令逆序写入
.text段。 - 这一条是什么,滚木吗?
我们来分析一下实现:
- 逆序写入是最简单的,只需要确保每一次有效输入之后会多执行一个
<,我们就能左移一格。 - 主循环,稍难一点,它会一直执行直到读取到我们规定的终止符
~。 - 一个巨大的类switch结构,这个最难,它负责识别不同的指令,并执行对应的逻辑。
- 一个重编码指令的逻辑,这玩意超级考验设计。
1. 内存分配
首先,我们需要一大堆的>,用来把指针移动到整个程序段的最右边,这些>的个数就是解释器程序段的大小。

