morington

VirtualMachine

Aug 1st, 2023 (edited)
1,197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. ''' https://t.me/dev_survival '''
  2.  
  3. class VirtualMachine:
  4.     def __init__(self):
  5.         self.registers = [0] * 4  # 4 регистра общего назначения
  6.         self.memory = [0] * 256  # Виртуальная память размером 256 байт
  7.  
  8.     def load_program(self, program):
  9.         address = 0
  10.         for instruction in program:
  11.             self.memory[address] = instruction
  12.             address += 1
  13.  
  14.     def execute(self):
  15.         pc = 0  # Счетчик команд
  16.         while True:
  17.             print(self.registers)
  18.             opcode = self.memory[pc]
  19.             if opcode == 0:  # Остановка программы
  20.                 break
  21.             elif opcode == 1:  # Load
  22.                 reg_index = self.memory[pc + 1]
  23.                 address = self.memory[pc + 2]
  24.                 self.registers[reg_index] = self.memory[address]
  25.                 pc += 3
  26.             elif opcode == 2:  # Write
  27.                 reg_index = self.memory[pc + 1]
  28.                 address = self.memory[pc + 2]
  29.                 self.memory[address] = self.registers[reg_index]
  30.                 pc += 3
  31.             elif opcode == 3:  # Addition
  32.                 reg_index = self.memory[pc + 1]
  33.                 reg_index1 = self.memory[pc + 2]
  34.                 reg_index2 = self.memory[pc + 3]
  35.                 self.registers[reg_index] = self.registers[reg_index1] + self.registers[reg_index2]
  36.                 pc += 4
  37.             else:
  38.                 print(f"Unknown opcode: {opcode}")
  39.                 break
  40.  
  41. # Пример программы в виде десятичного кода
  42. program = [
  43.     1, 0, 10,   # Загрузить значение из адреса 10 в регистр 0
  44.     1, 1, 20,   # Загрузить значение из адреса 20 в регистр 1
  45.     3, 2, 0, 1,  # Сложить значения из регистров 0 и 1 и сохранить результат в регистр 2
  46.     2, 2, 30,   # Сохранить значение из регистра 2 в адрес 30
  47.     0          # Остановка программы
  48. ]
  49.  
  50.  
  51. vm = VirtualMachine()
  52. vm.load_program(program)
  53.  
  54. # Выполняем
  55. vm.execute()
  56.  
  57. # Выводим результат из памяти
  58. print(vm.memory[30])
Advertisement
Add Comment
Please, Sign In to add comment