delphi3与汇编语言的接口(100分)

  • 主题发起人 肖雅文
  • 开始时间

肖雅文

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好!
我向向大家请教一个delphi3与汇编如何接口的问题,即在delphi3中如何调用汇编的程序。
希望大家多多指教!
 
呵呵,直接嵌入了。
去看看system.pas
和asm关键字吧。
 
Object Pascal的语法书上有说明的.
 
几种方法:
1. 用inline语句,写机器码。
2. 用asm语句写汇编程序。
3. 用{$L *.obj}将编译后的目标程序嵌入。(好象要用tasm编译的)
一般是推荐用第2种方法的。
 
补充一点,可以这样写
procedure x;
asm
mov ax,1
...
end;


procedure x;
begin
asm
...
end;
end;
 
begin
//正常的语句
asm //汇编
move ax,1
..
...
end;
//正常的语句
end;
 
这个年代了还用Delphi 3??
升级吧。
 
关键在于搞清楚调用你的汇编程序时,
参数和寄存器的关系。
参数传入的顺序位 EAX EDX ECX,
procedure WStrSet(var S: WideString;
P: PWideChar);
asm
MOV ECX,[EAX]
MOV [EAX],EDX
TEST ECX,ECX
JE @@1
PUSH ECX
CALL SysFreeString
@@1:
end;
调用时和普通函数调用是一样的。
别的和普通的汇编好像差不多,
不过现在是32位了,好像EAX, EBX用的较多。
建议多看看system源码
 
我的看法是, 除了对速度有特殊要求
或 要实现delphi无法实现的代码,
一般不要使用汇编, 因为目标代码
中编译器使用了特定的寄存器, 如果
使用了这些寄存器,一定要先push,否则
可能会出现意外.
另外, 一部分指令再delphi中不允许
使用.
请参看帮助.
 
要求硬件的可用汇编。其他的被说完了。给人家分吧
 
注意ASM关键字的用法
寄存器与参数的关系
为什么一定要用汇编呢?
 
时间太久,强制结束。 wjiachun
 
顶部