> It's mostly just replacing the names given to the opcodes in the datasheet back to the opcodes

Under the assumption that the input data is properly formatted you can generate machine code. This is however an abstraction which can fail as nothing forces a user to input valid files.

So we have an abstraction without any encapsulation.

I can only see that as being the case if you weren't aware of it. Otherwise, the awareness would be explicit intent to fail on malformed input, which seems like just as much as an encapsulation?

But, that's a great example! Thank you. This makes it clear that I'm probably sometimes wrong. ;)