我正在为Haskell中的NASM编译器编写Brainfuck .它可以编译小程序,但不能正确地使用大程序.
考虑以下Brainfuck代码:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Run Code Online (Sandbox Code Playgroud)
我把它表示为:
BfSource [Add 8,LoopL 0,GoRight 1,Add 4,LoopL 1,GoRight 1,Add 2,GoRight 1,Add 3,GoRight 1,Add 3,GoRight 1,Add 1,GoLeft 4,Sub 1,LoopR 1,GoRight 1,Add 1,GoRight 1,Add 1,GoRight 1,Sub 1,GoRight 2,Add 1,LoopL 2,GoLeft 1,LoopR 2,GoLeft 1,Sub 1,LoopR 0,GoRight 2,WriteChar,GoRight 1,Sub 3,WriteChar,Add 7,WriteChar,WriteChar,Add 3,WriteChar,GoRight 2,WriteChar,GoLeft 1,Sub 1,WriteChar,GoLeft 1,WriteChar,Add 3,WriteChar,Sub 6,WriteChar,Sub 8,WriteChar,GoRight 2,Add 1,WriteChar,GoRight 1,Add 2,WriteChar]
Run Code Online (Sandbox Code Playgroud)
哪个被翻译成以下程序集:
section .bss
memory resb 30000
section .text
global _start
_printChar:
mov rdx, 1
mov rbx, 1
mov rax, 4
int 80h
ret
_start:
mov …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个超压缩的brainfuck变种,这是一种带有8条指令的深奥编程语言.由于3位是存储8个值的最小存储量,所以我选择了它.我坚持的部分是如何读取不是2的幂的位数.
我尝试使用std::bitset,但这只是序列化为每位1字节的字符串,这与我想要的相反.我该怎么做?
对于使语言“快速”运行的原因,我知之甚少,但是对我来说,为极简主义而设计的语言也将非常快,对吗?
C比BrainFuck更接近英语,并且BrainFuck的编译器大小非常小,为1024字节,与Tiny C编译器(大小约为100 KB)相比几乎没有什么。
但是,所有在线网站都将C视为最快的语言条码字节码或汇编。
(清晰度编辑可将问题搁置)
如果我用C和BrainFuck编写了相同的程序(例如,它们计算了斐波那契数列的前100个数字),那么哪个程序可以在运行时更快地完成任务?哪一个编译速度更快?
有人请为我描述这个brainfuck解释器吗?
#include <stdlib.h>
char m[9999], *n[99], *r = m, *p = m + 5000, **s = n, d, c;
main()
{
for (read(0, r, 4000); c = *r; r++)
c - ']' || (d > 1 ||
(r = *p ? *s : (--s, r)), !d || d--), c - '[' || d++ ||
(*++s = r), d || (*p += c == '+', *p -= c == '-', p += c == '>',
p -= c == '<', c …Run Code Online (Sandbox Code Playgroud) brainfuck ×5
c ×2
assembly ×1
bit ×1
c++ ×1
for-loop ×1
interpreter ×1
performance ×1
stream ×1
x86 ×1