The assembly programming language is a low level language, situated between a high level programming language, like Python for example, and the code machine. So, the high level programming code, is converted first to an assembly code then converted to code machine by an assembler.
The language uses mnemonics to represent the low level machine instructions, and it is usually used as the programming language for applications where speed is critical in general. Or for real time embedded systems in particular.
The assembly language is related to the architecture of the machine. So it is machine dependent, and it differs from an architecture to an other.
For example, there is the
RISC, and the
CISC architectures. For each of one of these, correspond an
assembly language family:
- CISC: Complex Instruction Set Computer Architecture. In this computer architecture (Instructions Set Architecure), the size of the assembly code will be small. This is possible because the processor is build in a way that enables the execution of complex instructions that are composed of multiple operations. But, the number of cycles per instructions will be high. One of the CISC families is the x86 architecture. And NASM (Netwide Assembler ), MASM (Microsoft Macro Assembler), and GAS (GNU Assembler) are assembly languages adapted for this class of architecture.
- RISC: Reduced Instruction Set Computer Architecture. In this architecture, the size of the assembly code will be large. This is caused by the fact that the processor is build in a way that let him execute only simple instructions that can be run on one clock cycle . As a good consequence, the number of cycles per instructions will be low. One of the RISC families is the MIPS architecture (Microprocessor without Interlocked Pipelined Stages ), to which correspond the MIPS assembly language.