Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import sys
- import time
- if len(sys.argv) > 1:
- import ptasm
- a = 0
- b = 0
- c = 0
- ram = [0] * 100
- if len(sys.argv) <= 1:
- print("Enter your program in binary:")
- prl = sys.stdin.readline().strip()
- prog = []
- while prl:
- prog.append(prl)
- prl = sys.stdin.readline().strip()
- else:
- prog = []
- for i in ptasm.main(sys.argv):
- prog.append(i)
- prog = ["".join(filter(lambda a: a in "0123456789", i)) for i in prog]
- def getdataflowop(s):
- return s[-5:]
- def getaluop(s):
- return s[-9:-5]
- def get7bit(s):
- return s[-16:-9]
- def getexitbit(s):
- return s[8]
- def get8bit(s):
- return s[:-17]
- running = True
- pc = 0
- while running:
- try:
- i = prog[pc]
- except IndexError:
- break
- pc += 1
- dfop = getdataflowop(i)
- bit8 = int(get8bit(i), 2)
- bit7 = int(get7bit(i), 2)
- exit = getexitbit(i)
- aluo = getaluop(i)
- if dfop == "00000":
- pass
- elif dfop == "00001":
- a = bit8
- elif dfop == "00010":
- b = bit8
- elif dfop == "00011":
- c = bit8
- elif dfop == "00100":
- ram[bit7-1] = bit8
- elif dfop == "00101":
- a = ram[bit7-1]
- elif dfop == "00110":
- b = ram[bit7-1]
- elif dfop == "00111":
- c = ram[bit7-1]
- elif dfop == "01000":
- a = c
- elif dfop == "01001":
- b = c
- elif dfop == "01010":
- ram[bit7-1] = c
- elif dfop == "01011":
- if aluo == "0001":
- c = a + b
- elif aluo == "0010":
- c = a & b
- elif aluo == "0011":
- c = a | b
- elif aluo == "0100": # IFE
- if a != b:
- pc = bit7 - 1
- elif aluo == "0101": # JMP
- pc = bit7 - 1
- else:
- raise Exception("unknown ALU operation")
- elif dfop == "01100":
- if aluo == "0001":
- ram[bit7-1] = a + b
- elif aluo == "0010":
- ram[bit7-1] = a & b
- elif aluo == "0011":
- ram[bit7-1] = a | b
- elif aluo == "0100": # IFE
- if a != b:
- pc = bit7 - 1
- elif aluo == "0101": # JMP
- pc = bit7 - 1
- else:
- raise Exception("unknown ALU operation")
- elif dfop == "01101":
- print(ram[bit7-1])
- elif dfop == "01110":
- ram[b-1] = a
- elif dfop == "01111":
- ram[bit7-1] = 0
- elif dfop == "10000":
- ram[a] = 0
- elif dfop == "10001":
- ram[b] = 0
- elif dfop == "10010":
- ram[bit7-1] = int(sys.stdin.readline())
- else:
- raise Exception("unknown opcode")
- if exit == "1":
- break
- #print(i)
- #print(ram)
- #print("A: {}, B: {}, C: {}".format(a, b, c))
- if sys.platform == "win32":
- sys.stdin.readline()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement