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

2006-11-16 13:55 3125 5 6 分类: MCU/ 嵌入式
这么一个问题,假设有两个寄存器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};
  }

大家可以用一下,当然还会有很多的问题,也许我没意识到,希望大家能进来探讨
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户51143 2006-12-5 11:51

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

相关推荐阅读
用户51143 2006-12-27 14:15
标准的PID处理例程(转载自“漫漫人生路”)
/*==================================================================================================...
用户51143 2006-12-16 23:42
和你们在一起真的很开心
    一个偶尔的机会进入了vc++开发原地,可以说这里面的人都是初学者,虽然是初学,但是我们彼此享受着开发程序代给我们的快乐。我们不知道“高手”这个词代表着什么,也许对我们来说有点遥远,然而在这个漫...
用户51143 2006-12-11 20:50
学习系统开发之一“建立引导式的窗口”
  这个窗口是引导式的,所以,我们在这个窗口里不会添加任何的菜单选项,在进入窗口时,应该提示“现在开始吗”选项如果是“是”,那么就进入我们的系统。   显示你上次的问题,你所在的开发小组,小组成员,你...
用户51143 2006-12-05 12:09
单片机开发程序大全
我这里有单片机试验,带原理图,带C语言,汇编语言的(这里只是很少一部分,如果想要全的,请吧PID控制算法的C语言程序发给我,我会把余下的文件发给你,谢谢)  发到这个邮箱:jianmin5xin@16...
用户51143 2006-11-16 14:00
一个关于单片机库函数编写的问题(原创)
 当你调用一些函数时,为了避免反复复制和粘贴(在这个过程中经常还会导致拷贝错误,并且难以发现错误所在)的问题,我们最好是将经常用的一些函数或者协议编写成库函数,然后在主函数声明一下,就可以随便提取运用...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条