You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
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
def __str__(self): return "{:08b}".format(self.value)
def __repr__(self): return "{} ({})".format(self, self.n_bits)
class Acumulator(Register): positive_flag = False negative_flag = False zero_flag = False carry = False
def add(self, register): pass
|