public static Tile MemReg_Reg() { return(new Tile(typeof(AssignmentNode), new[] { makeTile <MemoryNode> ( makeTile <RegisterNode> () ), makeTile <RegisterNode> () }, (regNode, node) => { var root = node as AssignmentNode; var mem = root.Target as MemoryNode; var dst = mem.Address as RegisterNode; var src = root.Source as RegisterNode; return new[] { InstructionFactory.MoveToMemory(dst, src), InstructionFactory.Move(regNode, src) }; } )); }