zoukankan      html  css  js  c++  java
  • Brainfuck反汇编(Python)

    global cs
    global ip
    
    global ss
    #global sp
    
    global ds
    global bp
    
    global tab
    global out
    #cs='++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.'
    ip = 0
    
    ss = []
    #sp = 0
    
    ds = []
    bp = 0
    
    tab = 0
    out = []
    
    def tab_():
        i = tab
        stab = ''
        while i > 0:
            stab += '	'
            i -= 1
        return stab
    
    def push(var):
        global ss
        ss.append(var)
    
    def pop():
        global ss
        return ss.pop()
    
    def op_inc_val():
        global ip
        count = 0
        while True:
            op = cs[ip]            
            ip = ip + 1
            if op == '+':
                count = count + 1
            else:
                break
        print tab_()+'ds[%d] += %d'%(bp, count)
    
    def op_dec_val():
        global ip    
        count = 0
        while True:
            op = cs[ip]            
            ip = ip + 1
            if op == '-':
                count = count + 1
            else:
                break
        print tab_()+'ds[%d] -= %d'%(bp, count)
    
    def op_inc_dp():
        global bp
        bp = bp + 1
    
    def op_dec_dp():
        global bp
        bp = bp - 1
    
    def op_jmp_fwd():
        global tab
        print tab_()+'while ds[%d]:'%(bp)
        tab = tab + 1
    
    def op_jmp_bck():
        global tab
        tab = tab - 1
    
    def op_out():
        print tab_()+'putchar(ds[%d])'%(bp)
    
    def op_in():
        print tab_()+'getchar'
    
    end = len(cs)
    while ip < end:
        op = cs[ip]
        ip = ip + 1
        if op == '+':
            ip = ip - 1
            op_inc_val()
            ip = ip - 1
        elif op == '-':
            ip = ip - 1
            op_dec_val()
            ip = ip - 1
        elif 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
  • 相关阅读:
    【20211012】以确定去适应不确定
    【20211011】工作之余
    【20211009】二孩的心思
    【20211010】幸福声响
    【20211007】连岳摘抄
    【读书笔记】《创新与企业家精神》
    【20211006】连岳摘抄
    【20211008】生活规律,事情也好解决
    ASP.NET中DataGrid的简单用法
    无限级分类的实现
  • 原文地址:https://www.cnblogs.com/qintangtao/p/7100237.html
Copyright © 2011-2022 走看看