What's the difference between an ISA (e.g., MIPS) and Assembly language? I'm seeing some contexts where they appear to be used synonymously.
An Instruction Set Architecture (ISA) is physically correspondent to machine operations within a particular processor. This means that the ISA lists any and all instructions, as well as opcodes, that can be performed by specific processors.
An assembly language usually has a 1-1 relationship with the ISA, but can be implemented in different ways. Sometimes the assembly code can perform an entire set of ISA level instructions.
Assembly languages are an abstracted set of ISA opcodes, logic, and instructions that allow for variables/macros/functions/methods/etc. They can be very basic (meaning almost 1-1 mapping) or they can support more complex operations like structural programming blocks.