📄 registercall_demo.dpr
字号:
{$APPTYPE CONSOLE}
function DelphiFunc(I: Integer; var S1, S2:String) : Integer;
begin
if I < Length(S1) then
SetLength(S1, I);
S1 := S1 + S2;
Result := Length(S1);
end;
var
GS : String = '12345678';
procedure RegisterCall;
var
LS : String;
Len : Integer;
begin
LS := 'This is a test!';
//以下汇编代码相当于Delphi语句
// Len := DelphiFunc(8, LS, GS);
asm
mov eax, 8
lea edx, LS // 传入局部变量 LS. 局部变量必须使用lea指令载入地址
mov ecx, OFFSET &GS // 传入全局变量 GS. 变量名与BASM保留字中的GS(段地址寄存器)冲
// 突, 因此加复写标识符"&"
// 也可以使用语句 lea ecx, &GS
call DelphiFunc
mov Len, eax
end;
writeln(LS); // 'This is 12345678'
writeln(Len); // 16
end;
begin
RegisterCall;
readln;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -