|
|
|
|
@ -1,60 +0,0 @@
|
|
|
|
|
class VonNeumannMachine:
|
|
|
|
|
def __init__(self,memory_size=256):
|
|
|
|
|
self.memory = [0] * memory_size
|
|
|
|
|
self.pc = 0
|
|
|
|
|
self.registers = {'A':0,'B':0,'C':0}
|
|
|
|
|
self.halted = False
|
|
|
|
|
def load_program(self,program):
|
|
|
|
|
for i,val in enumerate(program):
|
|
|
|
|
self.memory[i]=val
|
|
|
|
|
def execute_instruction(self,instruction):
|
|
|
|
|
if not instruction or instruction == 0:
|
|
|
|
|
return
|
|
|
|
|
parts = instruction.split()
|
|
|
|
|
opcode = parts[0]
|
|
|
|
|
operands = parts[1:] if len(parts) > 1 else[]
|
|
|
|
|
if opcode == 'LOAD':
|
|
|
|
|
reg, addr = operands[0], int(operands[1])
|
|
|
|
|
self.registers[reg] = self.memory[addr]
|
|
|
|
|
elif opcode == 'ADD':
|
|
|
|
|
reg1, reg2 = operands[0], operands[1]
|
|
|
|
|
self.registers[reg1] += self.registers[reg2]
|
|
|
|
|
elif opcode == 'MUL':
|
|
|
|
|
reg1, reg2 = operands[0], operands[1]
|
|
|
|
|
self.registers[reg1] *= self.registers[reg2]
|
|
|
|
|
elif opcode == 'STORE':
|
|
|
|
|
addr, reg = int(operands[0]), operands[1]
|
|
|
|
|
self.memory[addr] = self.registers[reg]
|
|
|
|
|
elif opcode == 'JMP':
|
|
|
|
|
addr = int(operands[0])
|
|
|
|
|
self.pc = addr-1
|
|
|
|
|
elif opcode == 'HALT':
|
|
|
|
|
self.halter = True
|
|
|
|
|
def run(self):
|
|
|
|
|
while not self.halted and self.pc < len(self.memory):
|
|
|
|
|
current = self.memory[self.pc]
|
|
|
|
|
if isinstance(current, str):
|
|
|
|
|
self.execute_instruction(current)
|
|
|
|
|
self.pc += 1
|
|
|
|
|
program = [
|
|
|
|
|
"JMP 1",
|
|
|
|
|
"LOAD A 8",
|
|
|
|
|
"LOAD B 9",
|
|
|
|
|
"ADD A B",
|
|
|
|
|
"LOAD C 10",
|
|
|
|
|
"MUL A C",
|
|
|
|
|
"STORE 11 A",
|
|
|
|
|
"HALT",
|
|
|
|
|
5,
|
|
|
|
|
3,
|
|
|
|
|
2,
|
|
|
|
|
0
|
|
|
|
|
]
|
|
|
|
|
vm = VonNeumannMachine()
|
|
|
|
|
vm.load_program(program)
|
|
|
|
|
vm.run()
|
|
|
|
|
print("\n最终结果:")
|
|
|
|
|
print("寄存器A的值:", vm.registers['A'])
|
|
|
|
|
print("内存地址11的值:", vm.memory[11])
|
|
|
|
|
print("寄存器B的值:", vm.registers['B'])
|
|
|
|
|
print("寄存器C的值:", vm.registers['C'])
|