Appendix D Inline Assembler

If you need to write low-level software that interacts directly
with the hardware, Ada provides two ways to incorporate assembly
language code into your program. First, you can import and invoke
external routines written in assembly language, an Ada feature fully
supported by GNAT. However, for small sections of code it may be simpler
or more efficient to include assembly language statements directly
in your Ada source program, using the facilities of the implementation-defined
package System.Machine_Code, which incorporates the gcc
Inline Assembler. The Inline Assembler approach offers a number of advantages,
including the following:

No need to use non-Ada tools

Consistent interface over different targets

Automatic usage of the proper calling conventions

Access to Ada constants and variables

Definition of intrinsic routines

Possibility of inlining a subprogram comprising assembler code

Code optimizer can take Inline Assembler code into account

This chapter presents a series of examples to show you how to use
the Inline Assembler. Although it focuses on the Intel x86,
the general approach applies also to other processors.
It is assumed that you are familiar with Ada
and with assembly language programming.