肖 肖雅文 Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-15 #1 大家好! 我向向大家请教一个delphi3与汇编如何接口的问题,即在delphi3中如何调用汇编的程序。 希望大家多多指教!
M menxin Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-15 #2 呵呵,直接嵌入了。 去看看system.pas 和asm关键字吧。
C churchill Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-15 #3 Object Pascal的语法书上有说明的.
I Iknow Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-16 #4 几种方法: 1. 用inline语句,写机器码。 2. 用asm语句写汇编程序。 3. 用{$L *.obj}将编译后的目标程序嵌入。(好象要用tasm编译的) 一般是推荐用第2种方法的。
S SuperMMX Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-16 #5 补充一点,可以这样写 procedure x; asm mov ax,1 ... end; 或 procedure x; begin asm ... end; end;
W www Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-16 #6 begin //正常的语句 asm //汇编 move ax,1 .. ... end; //正常的语句 end;
R raider Unregistered / Unconfirmed GUEST, unregistred user! 1999-12-16 #9 关键在于搞清楚调用你的汇编程序时, 参数和寄存器的关系。 参数传入的顺序位 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源码
关键在于搞清楚调用你的汇编程序时, 参数和寄存器的关系。 参数传入的顺序位 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源码
张 张国龙 Unregistered / Unconfirmed GUEST, unregistred user! 2000-01-13 #11 我的看法是, 除了对速度有特殊要求 或 要实现delphi无法实现的代码, 一般不要使用汇编, 因为目标代码 中编译器使用了特定的寄存器, 如果 使用了这些寄存器,一定要先push,否则 可能会出现意外. 另外, 一部分指令再delphi中不允许 使用. 请参看帮助.
我的看法是, 除了对速度有特殊要求 或 要实现delphi无法实现的代码, 一般不要使用汇编, 因为目标代码 中编译器使用了特定的寄存器, 如果 使用了这些寄存器,一定要先push,否则 可能会出现意外. 另外, 一部分指令再delphi中不允许 使用. 请参看帮助.
G going_cc Unregistered / Unconfirmed GUEST, unregistred user! 2000-04-17 #13 注意ASM关键字的用法 寄存器与参数的关系 为什么一定要用汇编呢?