3.3 Signaling changed registers

When the compiler uses variables, it sometimes stores them, or the result of some calculations, in the processor registers. If you insert assembler code in your program that modifies the processor registers, then this may interfere with the compiler’s idea about the registers. To avoid this problem, Free Pascal allows you to tell the compiler which registers have changed. The compiler will then avoid using these registers. Telling the compiler which registers have changed is done by specifying a set of register names behind an assembly block, as follows:

 asm
   ...
 end ['R1', ... ,'Rn'];
Here R1 to Rn are the names of the registers you modify in your assembly code.

As an example:

    asm
    movl BP,%eax
    movl 4(%eax),%eax
    movl %eax,__RESULT
    end ['EAX'];
This example tells the compiler that the EAX register was modified.