armcc __asm源码
时间: 2023-07-31 14:05:49 浏览: 91
以下是一个使用ARM编译器的__asm关键字实现取得系统时间的示例:
```
#include <iostream>
using namespace std;
int main() {
unsigned int time;
__asm {
MRC p15, 0, time, c9, c13, 0;
}
cout << "System time: " << time << endl;
return 0;
}
```
在这个示例中,我们使用__asm关键字将一条ARM汇编指令嵌入到了程序中,取得了系统时间并将其存储在time变量中。MRC指令是从协处理器c9读取数据的指令,其参数依次为p15(协处理器标识符)、0(读取标志位)、time(存储读取结果的寄存器)、c9(协处理器c9)、c13(用于读取系统计时器的寄存器)和0(用于读取低32位的寄存器)。需要注意的是,汇编指令中使用的寄存器和变量名需要与程序中的定义保持一致。
相关问题
armcc __asm定义
在ARM编译器中,__asm是一个用于插入汇编代码的关键字,使用方式如下:
```
__asm
{
// 汇编代码
}
```
在花括号中的部分就是要插入的汇编代码。需要注意的是,不同的编译器可能对__asm关键字的语法有所差异,因此在使用时需要参考具体的编译器文档。下面是一个使用ARM编译器的__asm关键字实现将两个整数相加的示例:
```
#include <iostream>
using namespace std;
int main() {
int a = 2, b = 3, result;
__asm {
MOV R0, a;
ADD R0, R0, b;
MOV result, R0;
}
cout << "a + b = " << result << endl;
return 0;
}
```
在这个示例中,我们使用__asm关键字将三条ARM汇编指令嵌入到了程序中,将两个整数a和b相加的结果存储到了result变量中。需要注意的是,汇编指令中使用的寄存器和变量名需要与程序中的定义保持一致。
所以在stm32f4中屏蔽 __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "armcc");有什么影响
在STM32F4中,屏蔽掉__ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "armcc");会影响使用VFP(浮点运算器)进行浮点运算的性能。这段代码的作用是将当前的浮点状态寄存器(FPSCR)的值保存到内存中,以便在函数返回时还原浮点状态。如果屏蔽掉这段代码,浮点状态寄存器不会被保存和还原,这可能会导致浮点运算的结果不正确。此外,如果在函数调用过程中发生了浮点异常,调试器可能无法正确地定位异常的源代码行,从而增加调试的难度。因此,建议不要屏蔽这段代码,以确保浮点运算的正确性和调试的方便性。
阅读全文