Ejemplo n.º 1
0
    def getDisas(self):
        extended = flagmap[EXTENDED] if isExtendedInstr(self.instr) else ' '
        immidiate = flagmap[IMMIDIATE] if isImidiateInstr(self.instr) else ''
        sic = flagmap[SIC] if isSicInstr(self.instr) else ''
        inDirect = flagmap[INDIRECT] if isIndirectInstr(self.instr) else ''
        index = flagmap[INDEX] if isIndexedInstr(self.instr) else ''
        base = flagmap[BASE] if isBaseInstr(self.instr) else ''
        pc = flagmap[PC] if isPcInstr(self.instr) else ''
        operand = self.signedDisp()  # getDisp(self.instr)
        sign = '-' if operand < 0 else ''
        nixpbe = nixbpeToStringInstr(self.instr)
        p = INT(self.loc + len(self.instr), 24, False)
        ta = getTargetAddress(self.instr,
                              p,
                              register.B,
                              register.X,
                              self.cu.mem,
                              isDisas=True)
        out = nixpbe + ' ' + self.form.format(
            self.getSymbol(self.loc, toTA=False), extended, self.mnemonic,
            self.getSymbol(ta.dec, sic, inDirect, immidiate, index, toTA=True),
            sic, immidiate, inDirect, sign, abs(operand), pc, base, index)

        f = ' ' * (70 - len(out))
        return out + f + ' = ' + self.ta(ta)
Ejemplo n.º 2
0
from util import INT, SICXE_SIZE_BIT_EXPONENT, SICXE_SIZE_BIT_MANTISSA, SICXE_SIZE_BIT_WORD
from util.num import FLOAT
from random import randint

SICXE_NUM_REGISTER_A = 0
SICXE_NUM_REGISTER_X = 1
SICXE_NUM_REGISTER_L = 2
SICXE_NUM_REGISTER_PC = 8
SICXE_NUM_REGISTER_SW = 9
SICXE_NUM_REGISTER_B = 3
SICXE_NUM_REGISTER_S = 4
SICXE_NUM_REGISTER_T = 5
SICXE_NUM_REGISTER_F = 6

A = INT(randint(0,(1<<24) - 1), SICXE_SIZE_BIT_WORD, True)
X = INT(randint(0,(1<<24) - 1), SICXE_SIZE_BIT_WORD, False)
L = INT(randint(0,(1<<24) - 1), SICXE_SIZE_BIT_WORD, False)
PC = INT(randint(0,(1<<20) - 1), SICXE_SIZE_BIT_WORD, False)
SW = INT(randint(0,(1<<24) - 1), SICXE_SIZE_BIT_WORD, False)
B = INT(randint(0,(1<<24) - 1), SICXE_SIZE_BIT_WORD, False)
S = INT(randint(0,(1<<24) - 1), SICXE_SIZE_BIT_WORD, False)
T = INT(randint(0,(1<<24) - 1), SICXE_SIZE_BIT_WORD, False)
F = FLOAT(randint(0,(1<<48) - 1), SICXE_SIZE_BIT_EXPONENT, SICXE_SIZE_BIT_MANTISSA, False)

registers = {0: A, 1: X, 2: L, 3: B, 4: S, 5: T, 6: F, 8: PC, 9: SW}


def registerToString(num: int):
    r = "AXLBSTF?PW"
    if num in registers:
        return r[num]
Ejemplo n.º 3
0
Archivo: alu.py Proyecto: ekareem/SICXE
def addrm(register: INT, mem: MEMORY, addr, isImmediate=False):
    operand = addr if isImmediate else mem.getword(addr, True)
    register.add(operand, setSelf=True)
Ejemplo n.º 4
0
Archivo: alu.py Proyecto: ekareem/SICXE
def compfrm(register: FLOAT, sw: INT, mem: MEMORY, addr, isImmediate=False):
    operand = addr if isImmediate else mem.getfloat(addr)
    cc = SICXE_CC_GT if register > operand else SICXE_CC_LT if register < operand else SICXE_CC_EQ
    sw.setbits(cc, (6, 8), BIG)
Ejemplo n.º 5
0
Archivo: alu.py Proyecto: ekareem/SICXE
def comprr(register1: INT, register2: INT, sw: INT):
    cc = SICXE_CC_GT if register1 > register2 else SICXE_CC_LT if register1 < register2 else SICXE_CC_EQ
    sw.setbits(cc, (6, 8), BIG)
Ejemplo n.º 6
0
Archivo: alu.py Proyecto: ekareem/SICXE
def stch(register: INT, mem: MEMORY, addr):
    mem.setbyte(addr, register.getbits((0, 8), False, LITTLE))
Ejemplo n.º 7
0
Archivo: alu.py Proyecto: ekareem/SICXE
def ldch(register: INT, mem: MEMORY, addr, isImmediate=False):
    operand = addr if isImmediate else mem.getbyte(addr)
    if operand < 0 or operand > 0xff:
        raise Exception('cannot be longer the a byte')
    register.setbits(operand, (0, 8), LITTLE)
Ejemplo n.º 8
0
Archivo: alu.py Proyecto: ekareem/SICXE
def ld(register: INT, mem: MEMORY, addr, isImmediate=False):
    operand = addr if isImmediate else mem.getword(addr, False)
    register.set(operand)