class Register: registers = [] def __init__(self, n_bits, name=None): self.n_bits = n_bits if name is None: self.name = "r{}".format(len(Register.registers)) else: self.name = name self.value = 0 Register.registers.append(self) def truncate_val(self, value, bits=None): if bits is None: bits = self.n_bits return value & ((1 << bits) - 1) def trucate(self): self.value = self.truncate_val(self.value) def set(self, value): if value < 0: self.value = self.truncate_val(abs(value), self.n_bits - 1) self.negate() self.trucate() def get(self): return self.value def get_signed(self): if self.value & (1 << (self.n_bits - 1)) == 0: return self.value else: return self.value - (1 << self.n_bits) def complement(self): self.value = self.value ^ ((1 << self.n_bits) - 1) def negate(self): self.complement() self.value += 1 class Acumulator(Register): positive_flag = False negative_flag = False zero_flag = False carry = False def add(self, register): pass