为什么要编写嵌入式汇编代码?

时间:2013-08-17 05:23:51

标签: assembly arm

我最近在ARM平台上开始了嵌入式编程,我在几个代码示例中看到,尽管他们用C语言编写了项目,但在代码之间的某些地方他们称之为自己编写的一些汇编函数。更令人惊讶的是,他们在汇编函数中所做的就是mov smth, smth_else。由于这些代码是由一些专业团队编写的,我想知道这样做有什么好处?

更新 在我有限的观察中,我只是认为这种做法无处不在,它不需要一个例子,但似乎并非如此。所以这是我提到过的一个例子:

 /**
 * @brief  Return the Process Stack Pointer
 *
 * @param  none
 * @return uint32_t ProcessStackPointer
 *
 * Return the actual process stack pointer
 */
uint32_t __get_PSP(void) __attribute__( ( naked ) );
uint32_t __get_PSP(void)
{
  uint32_t result=0;

  __ASM volatile ("MRS %0, psp\n\t" 
                  "MOV r0, %0 \n\t"
                  "BX  lr     \n\t"  : "=r" (result) );
  return(result);
}

这是CMSIS Cortex-M3 Core Peripheral Access Layer Source File的一部分。不过,我无法理解为什么要branch使用BX而不是简单的函数调用或在C中转到。

1 个答案:

答案 0 :(得分:3)

为什么你可能会在项目中看到汇编程序有很多明显的原因 - 特别是嵌入式汇编程序:

  • 性能:针对特定硬件的功能进行优化。您通常会在编解码器,CPU密集型DSP操作(例如,DFT)中看到这一点,一些C标准库函数的实现(例如memcpy)。
  • C编译器不能到达的位置:通常是操作系统实现中的一些非常专业的接近金属的情况,例如初始化代码,上下文切换,中断处理程序。同步操作。