Splitting assembler function into several methods for separation of concerns, and easier testing.
Added current methods to interface.
Redoing tests now that methods have been broken into smaller parts.
Implementing the same code in smaller methods.