当前位置: 首页>>代码示例>>Python>>正文


Python Register.binary方法代码示例

本文整理汇总了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 = [
#.........这里部分代码省略.........
开发者ID:Chibaheit,项目名称:MIPS-ET,代码行数:103,代码来源:command.py


注:本文中的register.Register.binary方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。