On Thu, 05 Aug 2004 16:56:28 +0200, Florian Klaempfl wrote
> Ivan Stamenkovic wrote:
> 
> > Hi,
> > 
> > I have a problem when trying to pass some variable parameters to a
> > procedure writen using integrated assembler. I have reduced the
> > problem to the following code:
> > 
> > program IncrementDemo;
> > {$R+}
> > {$asmmode intel}
> > 
> > var
> >    a: dword;
> > 
> > procedure increment(var x: dword); assembler;
> >    asm
> >       push ds { Is DS saved by default? }
> > 
> >       lds ebx, x
> >       mov eax, [ebx]     { Line with the problem }
> >       inc eax
> >       mov [ebx], eax
> > 
> >       pop ds
> >    end;
> > 
> > begin
> >    write('Enter a number: ');
> >    readln(a);
> >    increment(a);
> >    writeln('Result is: ', a, '.')
> > end.
> > 
> > Line with the problem is marked above. If I tried using
> > mov eax, [bx]
> > integrated environment would report that 16-bit references are not
> > supported. With EBX instead of BX program reports run-time error 216.
> > 
> > I have tried using both DOS and Win32 targets. FPC 1.0.10, Win32.
> > 
> > Another Q: Is it necessary to save the segment registers' contents
> > when entering an assembler procedure?
> 
> FPC is 32 bit (flat memory modell) compiler so don't mess with 
> segment registers!
> 
> So:
>   procedure increment(var x: dword); assembler;
>      asm
>        mov ebx, x
>        mov eax, [ebx]     { Line with the problem }
>        inc eax
>        mov [ebx], eax
>      end;

In addition, please, note that ebx needs to be preserved in assembler
procedures in later FPC versions (although 1.0.10 is OK because of a different
default calling convention), so it would be better to either use indirect
addressing as mentioned in another message in this thread, or use a different
register (to avoid having to save ebx at the beginning and restore it at the
end) in order to ensure compatibility of your code with later FPC versions.

Tomas


_______________________________________________
fpc-pascal maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to