I was wondering if instruction set and assembly language are the same thing?
If not, how do they differ and what are their relations?
Thanks and regards!
A computer (more precisely processor) can only do computation i.e. perform arithmetic and logical operations.
A single arithmetic or logical operation is called an instruction.
The collection of all instructions is called instruction set of that computer (more precisely processor).
The instruction set is either hard-wired in processor or is implemented using a technique called microcode.
The computer could only be programmed, if it had a language i.e. something it understands. Binary code is not the language of computer. Binary code based instruction set is the language of computer.
A language is nothing but a specification on paper. The first ever language designed on paper was machine language. Its implementation in computer was only possible through hardware (or the latest technique microcode). That implementation is called instruction set. All other languages would be designed on top of machine language.
Machine language was difficult to work with as we mostly work with alphabets in our daily life. Therefore, it was decided to introduce a mnemonic language called Assembly Language on top of machine language. The implementation of Assembly language was named Assembler.
[You may wonder how the first assembler was written. The first assembler may or may not be written in machine language. I'm not mentioning the concept of bootstrapping here for the sake of simplicity]
SUMMARY:
Assembly language is converted to instruction set by Assembler. And both are different sides of a coin with a layer of abstraction or mnemonic code between them. Machine language is "bit encoding" of a processor's instruction set. Assembly language is "symbolic encoding" of a processor's instruction set.