I don't think you can get a "simple" approach.
An assembler program consists largely of strings of instructions. Each instruction does several differnt things (e.g., add to a register, set condition codes, change the PC and push an address on the stack, ...).
However, any particular instruction may be executed only for one of the effects (the "essential effects" for that instruction), with its other effects being ignored.
Your problem is one of changing a working (assembler) program, preserving the essential effects and using the freedom allowed by ignoring the nonessential ones to add confusion. Fundamentally you can preserve effects by discovering, for a particular instruction sequence having a particular effect, another instruction (sequence) which has the exact same algebraic effect and placing the answers in the same target locations as the original sequence.
What you need is a way to "replace this by (the equivalent) that" for a variety of this and that which are algebraically the same.
You can do this by hand. How much is enough? Stop when the code you want to protect is sufficiently hard for you to understand. [This will probably give you a self-inflicted code maintenanance problem, if you ever want to change that code].
An alternative is to use Program Transformation System, which is a tool for transforming source code, parameterized by descriptions of the programming language to be transformed.
See an example of this here: https://stackoverflow.com/a/7947562/120163
This kind of approach means you can leave your code in its original "maintainable" state, and then apply obfuscating transforms as the last build step.