我最近在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中转到。
答案 0 :(得分:3)
为什么你可能会在项目中看到汇编程序有很多明显的原因 - 特别是嵌入式汇编程序:
memcpy
)。