首页 > C/C++语言 > C/C++基本语法 > C语言高效编程的四大绝招(4)
2006
05-13

C语言高效编程的四大绝招(4)

 第四招:汇编嵌入

  高效C语言编程的必杀技,第四招——嵌入汇编。”在熟悉汇编语言的人眼里,C语言编写的程序都是垃圾”。这种说法虽然偏激了一些,但是却有它的道理。汇编语言是效率最高的计算机语言,但是,不可能靠着它来写一个操作系统吧?所以,为了获得程序的高效率,我们只好采用变通的方法–嵌入汇编,混合编程。举例如下,将数组一赋值给数组二,要求每一字节都相符。

  _NOBR> _CODE>char string1[1024],string2[1024];_CODE>
  
  _NOBR>

  方法I

  _NOBR> _CODE>int I;
  for (I =0 ;I<1024;I++)
  *(string2 + I) = *(string1 + I)_CODE>
  
  _NOBR>

  方法J

  _NOBR> _CODE>#ifdef _PC_
  int I;
  for (I =0 ;I<1024;I++)
  *(string2 + I) = *(string1 + I);
  #else
  #ifdef _ARM_
  __asm
  {
  MOV R0,string1
  MOV R1,string2
  MOV R2,#0
  loop:
  LDMIA R0!, [R3-R11]
  STMIA R1!, [R3-R11]
  ADD R2,R2,#8
  CMP R2, #400
  BNE loop
  }
  #endif_CODE>
  
  _NOBR>

  方法I是最常见的方法,使用了1024次循环;方法J则根据平台不同做了区分,在ARM平台下,用嵌入汇编仅用128次循环就完成了同样的操作。这里有朋友会说,为什么不用标准的内存拷贝函数呢?这是因为在源数据里可能含有数据为0的字节,这样的话,标准库函数会提前结束而不会完成我们要求的操作。这个例程典型应用于LCD数据的拷贝过程。根据不同的CPU,熟练使用相应的嵌入汇编,可以大大提高程序执行的效率。

  虽然是必杀技,但是如果轻易使用会付出惨重的代价。这是因为,使用了嵌入汇编,便限制了程序的可移植性,使程序在不同平台移植的过程中,卧虎藏龙,险象环生!同时该招数也与现代软件工程的思想相违背,只有在迫不得已的情况下才可以采用。


留下一个回复