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;
_______________________________________________ fpc-pascal maillist - [EMAIL PROTECTED] http://lists.freepascal.org/mailman/listinfo/fpc-pascal