Example #1
0
 def Parse(self, line):
     self.newAddress = None
     self.newTarget = None
     self.newCommand = None
     self.newJump = None
     self.newLabel = None
     parsed = self.oneline.parseString(line)
     if self.newAddress is not None:
         result = Assembler.AddressInstruction(self.newAddress)
         return result
     elif self.newCommand is not None:
         #print(self.newCommand.Expression)
         if self.newTarget is None:
             self.newTarget = Assembler.DestinationBits()
         if self.newJump is None:
             self.newJump = Assembler.JumpBits()
         result = Assembler.ControlInstruction(self.newCommand,
                                               self.newTarget, self.newJump)
         return result
     elif self.newTarget is not None:
         cmd = self.newTarget.ToPlainStr()
         self.newCommand = Assembler.InstructionBits(cmd)
         self.newTarget = Assembler.DestinationBits()
         if self.newJump is None:
             self.newJump = Assembler.JumpBits()
         result = Assembler.ControlInstruction(self.newCommand,
                                               self.newTarget, self.newJump)
     elif self.newLabel is not None:
         result = self.newLabel
         return result
     else:
         return None
Example #2
0
 def GotJump(self, jmp):
     self.newJump = jmp[0]
     #print(jmp)
     if self.newJump not in Tables.jump_table:
         raise Exception("wrong jump expression")
     self.newJump = Assembler.JumpBits()
     if "G" in jmp[0]:
         self.newJump.AddJ3()
     if "E" in jmp[0]:
         self.newJump.AddJ2()
     if "N" in jmp[0]:
         self.newJump.RemoveJ2()
     if "L" in jmp[0]:
         self.newJump.AddJ1()
     if "P" in jmp[0]:
         self.newJump.AddJ1()
         self.newJump.AddJ2()
         self.newJump.AddJ3()