Most organizations and programmers favor high-level languages over assembly for new developments; they see assembly as verbose, complex, non-portable and error prone. Nevertheless, embedded engineers often need to work with assembly programs, for the following reasons:
they may need to upgrade, fix or interface to legacy assembly code.
assembly gives easy access to low-level resources.
in real-time systems, assembly code takes a predictible number of machine cycles and is often faster than the code high-level language compilers generate.