Inline assembly — also called inline assembly language or inline assembler — is a block of assembly language code that is inserted directly into functions and source code for another language. This allows a programmer to insert a block of pure assembly language into a program in which the rest of the program is using a non-assembly language. The ability is supported under some languages — such as C, C++ and Pascal — but is a feature of the specific compiler used and is not necessarily a part of the language standard. In many instances, inline assembly is used to access special functions in the central processing unit (CPU), to optimize code or to perform very-low-level operations such as memory blitting. Although a certain compiler or programming language might have support for creating cross-platform executables, the use of inline assembly normally restricts the program to systems that can employ the specific assembly instructions or have matching architecture.
There are several ways in which a language or compiler allows inline assembly to be included in a standard source code file. One of the easiest methods is simply by defining the start of an assembly block, after which all commands are interpreted as direct assembly. Some integrated development environments (IDEs) and compilers actually allow the inline code to use variables defined in the program or function without explicitly loading them into registers first.
Another way in which inline assembly is defined within a source file is through the use of a dedicated assembly-language-only function. In this case, the inline code usually cannot be combined with non-assembly code, such as a control loop or return statement. When implemented in this way, the inline function also usually needs to explicitly push and pop variables on and off the stack to use local variables or pass values outside the function.
One of the most common uses for inline assembly code is pinpoint optimization for small segments of a program. Depending on how the inline code is integrated, this can mean using more human-readable language commands wrapped around inline code that directly performs some action very quickly and efficiently. Additionally, if the target system is known, the code can use hardware-specific registers and commands that can make the program execute much faster.
Inline assembly can be used to access parts of the operating system, CPU or even hardware ports directly when other methods might fail or cause a system error. This can be used to quickly change frames on a graphics card or to send signals directly to a particular interrupt or hardware port. One of the dangers of using the assembly code in this way, however, is that small mistakes can be hard to find or cause the program to crash unexpectedly on certain systems.