EDN首页   博客首页

日志档案

发表于 2006-11-16 13:55:32

2

标签: 寄存器  库函数  

关于一个提高效的执行代码(原创)

这么一个问题,假设有两个寄存器m和n(有可能地址不相邻),分别存放着一个16位数值的,高八位和低八位的数值。那么让你将这个十六位数值打印出来,该如何操作?
我们通常的做法是:
  int a;
  a="m";
  a+=n*256;
大家可以汇编运行一下,他的汇编结果大概在20行左右。不过这个是个通用做法,简单,然而代价是低效。
如果地址是相邻的,那么我们可以这么写:
  float a;
  a="m";
这个汇编结果是3行,它是巧妙的运用了float数据类型的16位的特点,给它高八位便能将相邻的余下八位自动导出。注意,M必须存放的是高八位,N必须存发的是低八位,如果反过来,结果是错误的。这个程序的特点是,高效快速,但是有限制,“地址相邻"。
那么有没有一个即高效又通用的程序呢?
答案是肯定的。笔者刚刚试验了一下,效果特别显著
这个程序利用了共用体和结构体的结合
#define  unsigned int unit
union a
{
 uint t;
 struct b
   {
     unit m;
     uint n;
      }str;
  }uni;
main()
{
 uni.str.m="2";
 uni.str.n="3";
 printf{"the code is%d",uni.t};
  }
大家可以用一下,当然还会有很多的问题,也许我没意识到,希望大家能进来探讨

系统分类: 单片机   |   用户分类: 以前的   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(736)    回复(1)  

投一票您将和博主都有获奖机会!

最新评论

  • jianmin5xin

    2006-12-5 11:51:27

    的确是很简单的问题,我的目的不是在告诉大家我发现了什么新技术,而是在说这个东西可以举一反三,只有灵活运用了才能左右逢源。谢谢留言^_^