GlobalCSGlobalIPGlobalss#GlobalSPGlobalDSGlobalBPGlobalTabGlobal out#cs='++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++. +++.>++.<<+++++++++++++++.>.+++.------.--------. >+.>.'IP=0SS=[] #sp=0DS=[]BP=0Tab=0 out=[]def tab_ (): I=Tab Stab="' whilei >0: Stab+='\ t'I-=1 returnstabdef Push (var): GlobalSS Ss.append (var) def pop ():GlobalSSreturnSs.pop () def op_inc_val ():GlobalIP Count=0 whileTrue:op=Cs[ip] IP= IP +1 ifOP = ='+': Count= Count +1 Else: Breakprint tab_ ()+'ds[%d] + =%d'%(BP, Count) def op_dec_val ():GlobalIP Count=0 whileTrue:op=Cs[ip] IP= IP +1 ifOP = ='-': Count= Count +1 Else: Breakprint tab_ ()+'ds[%d]-=%d'%(BP, Count) def OP_INC_DP ():Globalbp BP= BP +1def OP_DEC_DP ():Globalbp BP= BP-1def op_jmp_fwd ():Globaltab Print tab_ ()+'While ds[%d]:'%(BP) tab= tab +1def op_jmp_bck ():Globaltab TAB= Tab-1def op_out (): Print tab_ ()+'Putchar (ds[%d])'%(BP) def op_in (): Print tab_ ()+'GetChar'End=Len (CS) whileIP <End:op=Cs[ip] IP= IP +1 ifOP = ='+': IP= IP-1op_inc_val () IP= IP-1elif op=='-': IP= IP-1op_dec_val () IP= IP-1elif op=='>': OP_INC_DP () elif op=='<': OP_DEC_DP () elif op=='[': Op_jmp_fwd () elif op==']': Op_jmp_bck () elif op=='.': Op_out () elif op==',': op_in ()Else: Print'Invalid opcode' Break
Brainfuck Disassembly (Pythone)