本文整理汇总了Python中register.Register.binary方法的典型用法代码示例。如果您正苦于以下问题:Python Register.binary方法的具体用法?Python Register.binary怎么用?Python Register.binary使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类register.Register
的用法示例。
在下文中一共展示了Register.binary方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from register import Register [as 别名]
# 或者: from register.Register import binary [as 别名]
class Command:
def __init__(self, program, pos, name = None, first = None,
second = None, third = None, imm = None, label = None):
name = name.lower()
if name not in rType.keys() and \
name not in iType.keys() and \
name not in jType.keys():
raise "'%s' is not a MIPS assembly command." % (name.lower())
self.program = program
self.pos = pos
self.name = name
self.rs = EmptyRegister()
self.rt = EmptyRegister()
self.rd = EmptyRegister()
registers = (
rType[name][-1] if name in rType else \
iType[name][-1] if name in iType else \
jType[name][-1]
)
rList = [x for x in [first, second, third] if x is not None]
if len(registers) != len(rList):
raise "'%s' requires %d registers." % (name, len(registers))
for _, reg in zip(registers, rList):
if _ == "rs":
self.rs = Register(reg)
if _ == "rd":
self.rd = Register(reg)
if _ == "rt":
self.rt = Register(reg)
if isinstance(imm, int):
self.imm = imm
else:
self.imm = eval(imm) if imm is not None else 0
self.label = label
if imm is not None and self.label is not None:
raise "Label and imm can't both exist."
@staticmethod
def parseLine(program, pos, line):
global commandTypes
for m in commandTypes:
ans = m.match(line)
if ans is not None:
group = ans.groupdict()
return Command(program = program, pos = pos, **group)
raise "'%s' is not a command." % (line)
def toBin(self):
if self.name in rType.keys():
ans = 0 # opcode
ans |= (self.rs.binary() << 21) # rs
ans |= (self.rt.binary() << 16) # rt
ans |= (self.rd.binary() << 11) # rd
ans |= (self.imm << 6) # shamt
ans |= (rType[self.name][1] << 0) # funct
return ans
if self.name in iType.keys():
ans = iType[self.name][0] << 26 # opcode
ans |= (self.rs.binary() << 21) # rs
ans |= (self.rt.binary() << 16) # rt
if len(iType[self.name]) > 2:
ans |= (iType[self.name][1] << 16) # rt adjustment
if self.label is not None:
if "b" == self.name[0]:
tmp = self.program.Label(self.label) - self.pos - 1
else:
tmp = self.program.Label(self.label)
ans |= (tmp & 0xFFFF)
else:
if "b" == self.name[0]:
ans |= (self.imm >> 2 & 0xFFFF)
else:
ans |= (self.imm & 0xFFFF)
return ans
if self.name in jType.keys():
ans = jType[self.name][0] << 26 # opcode
if self.label is not None:
ans |= ((self.program.Label(self.label) + \
self.program.textBase) % (1 << 26)) # label
else:
ans |= (self.imm % (1 << 26)) # address
return ans
def Size(self):
return 1
def Bytes(self):
x = self.toBin()
ans = [
#.........这里部分代码省略.........