Ok danke, mit Assembler kenne ich mich kein Stück aus. Das bedeutet also nein.
Ich verstehe das mit dem Assembler aber noch nicht, wenn ich jetzt z.B. einmal gerne dasd
[Ref]
testen würde.
Folgender Code
Delphi-Quellcode:
program Project16;
{$APPTYPE CONSOLE}
{$R *.res}
uses System.SysUtils;
var
a,b,c: Integer;
procedure stuffA(
var a: Integer;
var b: Integer;
var c: Integer
);
stdcall;
begin
asm nop
end;
end;
procedure stuffB(
var a: Integer;
const [Ref] b: Integer;
var c: Integer
);
stdcall;
begin
// b := 42; // VERBOTEN
asm nop
end;
end;
begin
a := 10;
b := 20;
c := 30;
stuffA(a,b,c);
stuffB(a,b,c);
end.
ergibt folgende Assembly:
Code:
Project16.dpr.31: begin
004194E8 55 push ebp
004194E9 8BEC mov ebp,esp
004194EB 83C4F0 add esp,-$10
004194EE A164B64100 mov eax,[$0041b664]
004194F3 C60001 mov byte ptr [eax],$01
004194F6 B8806E4100 mov eax,$00416e80
004194FB E89CF6FEFF call @InitExe
Project16.dpr.32: a := 10;
00419500 C705C80E42000A000000 mov [$00420ec8],$0000000a
Project16.dpr.33: b := 20;
0041950A C705CC0E420014000000 mov [$00420ecc],$00000014
Project16.dpr.34: c := 30;
00419514 C705D00E42001E000000 mov [$00420ed0],$0000001e
Project16.dpr.36: stuffA(a,b,c);
0041951E 68D00E4200 push $00420ed0
00419523 68CC0E4200 push $00420ecc
00419528 68C80E4200 push $00420ec8
0041952D E83AD9FFFF call stuffA
Project16.dpr.37: stuffB(a,b,c);
00419532 68D00E4200 push $00420ed0
00419537 68CC0E4200 push $00420ecc
0041953C 68C80E4200 push $00420ec8
00419541 E82ED9FFFF call stuffB
Project16.dpr.38: end.
00419546 E831C7FEFF call @Halt0
Das bedeutet nun dass man "const [Ref]" als Ersatz für "var" nehmen könnte?