This paper presents an algorithm for the generation of all mechanical assembly sequences for a given product. The algorithm employs a relational model of assemblies. In addition to the geometry of the assembly, this model includes a representation of the attachments that bind one part to another. The problem of generating the assembly sequences is transformed into the problem of generating disassembly sequences in which the dissassembly tasks are the inverse of feasible assembly tasks. This transformation leads to a decomposition approach in which the problem of disassembling one assembly is decomposed into distinct subproblems, each being to disassemble one subassembly. It is assumed that exactly two parts or subassemblies are joined at each time, and that whenever parts are joined forming a subassembly, all contacts between the parts in that subassembly are established. Furthermore, it is assumed that the feasibility of joining two subassemblies is independent of how those subassemblies were built. The algorithm returns the AND/OR graph representation of assembly sequences. The correctness of the algorithm is based on the assumption that it is always possible to decide correctly whether two subassemblies can be joined, based on geometrical and physical criteria. This paper presents an approach to compute this decision. An experimental implementation for the class of products made up of polyhedral and cylindrical parts having planar or cylindrical contacts among themselves is described. Bounds for the amount of computation involved are presented.