Applies to all low construct instructions. Assembly language of processors or even microcontrollers are not the lowest level. There are still opcodes below assembly language. Assembly language are still largely human readable mnemonic codes that you can easily identify what it does. Example, LD IS LOAD. ADDLT is ADD SOMETHING TO SOMETHING IF CONDITION IS LESS THAN, or. JZ is JUMP TO LABEL OF ZERO FLAG IS SET. I am mixing assembly mnemonic codes from various architecture.
Generally it doesn’t matter, all these architectures may differs in a lot of ways but generally follows well understood machine concepts discovered decades ago. SIMD, DMA, STACK MACHINE vs REGISTER, RISC vs CISC, are yesterday concepts.
ARM didn’t discover their architecture from scratch. Even at assembly level, you are still not exposed into how processors works. Like how predictive branching works, how registers renaming works inside the processor, how single opcodes are split into multiple micro opcodes to create more overlapping concurrency when executing a sequence of opcodes where each may have to wait for different parts of the processors for the execution to be completed. Compilers and/or Processors also does instructions reordering if there are no calculated dependency among the instructions.
Are all these learnt because of Assembly language? Definitely NO. But do you need to know all these to be good in Assembly language? Definitely YES. Your assembly language are just instructions, what you are trying to drive is a machine. The performance you want to get from is a machine, the machine is what you want to understand. You can’t get better just simply knowing assembly language, when you don’t understand memory wait states and what it means between the processor and memory when they don’t work on the same clockspeed. Why is the memory clockspeed different from the processor? How does reading from the memory works? What are address lines and what are data lines? How do the signal of the memory get READ or WRITTEN? Do you need to know abit of how electrical signals works between electronic components?
Suddenly you will think I am over exaggerating on what you need to know but clearly all these seems not described in the languages right? Well that is the difference between a piece of hack and just another piece of instructions. Software engineers of the previous era designing for games consoles knows their machine so well that they can come out with hacks and techniques to exploit performance out from the machine, even to the point of taking advantages of milliseconds screen refresh to run computation when the screen is not drawing. Now because the graphic world is so complex that programmers just simply throw an OPENGL instruction and expect the drivers and the hardware to do all the rest for good performance.
I hope this passage drill more into understanding Computing and Computer Science and open up to more questions of what does a Computer Scientist means to you. Just a software developer? or perhaps it is not the title that means something, but knowing the vast knowledge behind just a programming language that makes you who you are