当前位置:编程学习 > Delphi >>

Delphi的BASM使用,调函数

function TForm1.MyShowMessage(str1: string): integer; //这个begin之后就报内存地址错误,求原因 //【注】如果我MyShowMessage为全局时,程序没错 //但都为Form1时,报内存地址错误。 begin asm push eax mov eax, str1 call showmessage pop eax end; Result:= 0; end; procedure TForm1.Button4Click(Sender: TObject); var str: string; begin if CheckBox1.Checked then str:= str + #13 + CheckBox1.Caption; if CheckBox2.Checked then str:= str + #13 + CheckBox2.Caption; if CheckBox3.Checked then str:= str + #13 + CheckBox3.Caption; asm mov eax, str call MyShowMessage end; // MyShowMessage(str); end;
答案:MyShowMessage 是一个函数,所以第一个传递进去的参数就不是eax而是edx了,你的例子改成这样就可以执行了,但是你不保存寄存器是不保险。
  asm
    mov edx, str
    call MyShowMessage
  end;

上一个:c++, javascript,java,delphi中有没大数阶乘,相乘,相除等现成的函数?
下一个:delphi7好书推荐

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,