阅读:1308回复:1
大哥们,小弟遇到一个汇编问题,求解
在C语言中:利用函数指针,可以很容易的在交互的环境中完成函数调用.如以下:
typedef int (*PFN)(int , int); int add(int a, int b); int main(int argc, char *argv[]) { PFN pfn; int a,b,c; a=100; b=200; printf("add=%p\n", add); pfn = (int (*)(int,int))add; c=(*pfn)(a,b); printf("c=%d\n", c); return 0; } int add(int a, int b) { return a+b; } 现在小弟开发的系统,需要用汇编来实现这一功能. 大家有没有什么好的建议,或者现成的程序段提供. 我现在的环境是是一个8位机, 故存在以下问题, 1.如何取得函数的地址?(自己动手算,好象不大合理吧.)取得的绝对地址可能是16位的,相对地址也是11位的,怎么保存啊? 2.取得的地址,传递后,如何调用这个地址的函数呢?(acall a 或者 acall dptr显然是不行的).直接修改程序指针也不大合理. 求各位大虾 大哥,大姐,高人,学长,不吝赐教. 不胜感谢. 小弟的邮箱: cuij@xinli.com.cn |
|
论坛版主
|
沙发#
发布于:2005-06-30 16:05
这个你不用担心,汇编编译器最基本的作用之一就是帮你算地址三:)
不管你说的是什么汇编,总会有这样的指令:CALL,你只需要定义好子函数,然后CALL它就行了,如果你一定要用函数指针,可以定义一个变量,然后变量值等于子函数的函数名(这里面实际可能保存了函数首地址的偏移,具体是针对哪儿的偏移这个不同汇编就差别很大了),然后按符合语法要求的方式调用就行了。机器的位数虽然会对访存有影响,但在汇编这一级不会表现得太突出。在存储器中保存什么数据都可以三。数据类型虽然依赖于机器字宽,不过汇编可以帮你扩展。 |
|