The integrated assembler


Introduction

The compiler supports inline assembler like TP, but the used syntax is that of the GNU AS, because the compiler use the GNU AS.

The text between ASM and END is direct written to the generated assembler file. Local variables and parameters of functions are sustituted by there address on the stack, relativ to EBP.

Syntax

The assembler block begins with ASM and ends with END . After the END it's possible to specifie the registers which are modified by the assembler block. The compiler assumes, that if there are no registers specified all registers are modified.

Examples:

procedure example;

  begin
     asm
        movw $3,%ax
        { the DOS extender crashes in some cases EBP }
        pushl %ebp
        int $0x10;
        popl %ebp
     end ['EAX']; { EAX is modified }
  end;

Comments are allowed like in Pascal with {...}. Secondly it's possible to use C+ comments with /* ... */ and // as line comments. Third, it's allowed to use ; as begin of a line comment like in the Intel's asm.

For questions about the syntax, look at the FAQs of the WEB server.

Keywords

The assembler supports some keywords to make assembler programming easier. __SELF gives you access to the actuell class pointer.

__RESULT gives you access to the result of a function. __OLDEBP gives you access to the frame pointer of the calling function in nested functions

Example:

function example(x,y : longint) : longint;

  begin
     asm
        movl X,%eax
	movl Y,%ebx
        imul %ebx
        movl %eax,__RESULT
     end;
  end;


back to Programmer's Manual

fnklaemp@cip.ft.uni-erlangen.de

Copyright (c) 1996 by Florian Klaempfl