cui.jian.510
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2005-11-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1261回复:1

大哥们,小弟遇到一个汇编问题,求解

楼主#
更多 发布于:2005-06-24 11:46
  在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
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-30 16:05
这个你不用担心,汇编编译器最基本的作用之一就是帮你算地址三:)
不管你说的是什么汇编,总会有这样的指令:CALL,你只需要定义好子函数,然后CALL它就行了,如果你一定要用函数指针,可以定义一个变量,然后变量值等于子函数的函数名(这里面实际可能保存了函数首地址的偏移,具体是针对哪儿的偏移这个不同汇编就差别很大了),然后按符合语法要求的方式调用就行了。机器的位数虽然会对访存有影响,但在汇编这一级不会表现得太突出。在存储器中保存什么数据都可以三。数据类型虽然依赖于机器字宽,不过汇编可以帮你扩展。
根据地的兄弟们,团结就是力量
游客

返回顶部