这么一个问题,假设有两个寄存器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};
}
大家可以用一下,当然还会有很多的问题,也许我没意识到,希望大家能进来探讨
用户51143 2006-12-5 11:51
的确是很简单的问题,我的目的不是在告诉大家我发现了什么新技术,而是在说这个东西可以举一反三,只有灵活运用了才能左右逢源。谢谢留言^_^