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
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()