另外还要注意必需使用32位寻址方式, ES基本上是没有意义的, DS:Varible这种形式
的内存变量引用也是很危险的, 可以用
LEA ESI, Varible
MOV DWORD PTR [ESI], EAX
等方式来解决.
另外, 可以直接使用局部变量, 比如:
var i:WORD;
begin
i:=10;
asm {
MOV AX, i //合法
MOV i, AX //合法
MOV i, 100 //合法
MOV i, WORD PTR [10] //不合法
MOV WORD PTR [10], i //不合法
}
end;
还可以使用call来调用函数, 需要注意的是参数的入栈方式, 必需根据各种调用类型
如: cdecl, pascal等来决定的
此外, 在混合编程的时候必需对在asm{}中使用到的寄存器进行保存, 比如:
if i<10 then
begin
asm{
push EAX
push ESI
LEA ESI,j
MOV EAX, i
MOV DWORD ptr [j], EAX
MOV i, ESI
pop ESI
pop EAX
}
end;
showmessage(inttostr(j));