There are so many disadvantages and problems involved in assembly programming that it
is advisable to consider the alternatives before deciding to use assembly code for a
particular task. The most important reasons for not using assembly programming are:
1. Development time : Writing code in assembly language takes much longer time than
in a high level language.
2. Reliability and security : It is easy to make errors in assembly code. The assembler is
not checking if the calling conventions and register save conventions are obeyed.
Nobody is checking for you if the number of PUSH and POP instructions is the same in
all possible branches and paths. There are so many possibilities for hidden errors in
assembly code that it affects the reliability and security of the project unless you
have a very systematic approach to testing and verifying.
3. Debugging and verifying : Assembly code is more difficult to debug and verify
because there are more possibilities for errors than in high level code.
4. Maintainability : Assembly code is more difficult to modify and maintain because the
language allows unstructured spaghetti code and all kinds of dirty tricks that are
difficult for others to understand. Thorough documentation and a consistent
programming style is needed.
5. System code can use intrinsic functions instead of assembly : The best modern C++
compilers have intrinsic functions for accessing system control registers and other
system instructions. Assembly code is no longer needed for device drivers and other
system code when intrinsic functions are available.
6. Application code can use intrinsic functions or vector classes instead of assembly:
The best modern C++ compilers have intrinsic functions for vector operations and
other special instructions that previously required assembly programming. It is no
longer necessary to use old fashioned assembly code to take advantage of the
Single-Instruction-Multiple-Data (SIMD) instructions.
7. Portability: Assembly code is very platform-specific. Porting to a different platform is
difficult. Code that uses intrinsic functions instead of assembly are portable to all x86
and x86-64 platforms.
8. Compilers have been improved a lot in recent years : The best compilers are now
better than the average assembly programmer in many situations.
9. Compiled code may be faster than assembly code because compilers can make
inter-procedural optimization and whole-program optimization : The assembly
programmer usually has to make well-defined functions with a well-defined call
interface that obeys all calling conventions in order to make the code testable and
verifiable. This prevents many of the optimization methods that compilers use, such
as function inlining, register allocation, constant propagation, common subexpression
elimination across functions, scheduling across functions, etc. These
advantages can be obtained by using C++ code with intrinsic functions instead of