Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ''' https://t.me/dev_survival '''
- class VirtualMachine:
- def __init__(self):
- self.registers = [0] * 4 # 4 регистра общего назначения
- self.memory = [0] * 256 # Виртуальная память размером 256 байт
- def load_program(self, program):
- address = 0
- for instruction in program:
- self.memory[address] = instruction
- address += 1
- def execute(self):
- pc = 0 # Счетчик команд
- while True:
- print(self.registers)
- opcode = self.memory[pc]
- if opcode == 0: # Остановка программы
- break
- elif opcode == 1: # Load
- reg_index = self.memory[pc + 1]
- address = self.memory[pc + 2]
- self.registers[reg_index] = self.memory[address]
- pc += 3
- elif opcode == 2: # Write
- reg_index = self.memory[pc + 1]
- address = self.memory[pc + 2]
- self.memory[address] = self.registers[reg_index]
- pc += 3
- elif opcode == 3: # Addition
- reg_index = self.memory[pc + 1]
- reg_index1 = self.memory[pc + 2]
- reg_index2 = self.memory[pc + 3]
- self.registers[reg_index] = self.registers[reg_index1] + self.registers[reg_index2]
- pc += 4
- else:
- print(f"Unknown opcode: {opcode}")
- break
- # Пример программы в виде десятичного кода
- program = [
- 1, 0, 10, # Загрузить значение из адреса 10 в регистр 0
- 1, 1, 20, # Загрузить значение из адреса 20 в регистр 1
- 3, 2, 0, 1, # Сложить значения из регистров 0 и 1 и сохранить результат в регистр 2
- 2, 2, 30, # Сохранить значение из регистра 2 в адрес 30
- 0 # Остановка программы
- ]
- vm = VirtualMachine()
- vm.load_program(program)
- # Выполняем
- vm.execute()
- # Выводим результат из памяти
- print(vm.memory[30])
Advertisement
Add Comment
Please, Sign In to add comment