NXP S32K144 汇编小记

GCC规定了一个内联汇编的语法,不同硬件平台上的GCC内联汇编几乎都是这样的:

asm(
    汇编指令列表
    :输出运算符列表
    :输入运算符列表
    :被更改的资源列表
};

 

在GCC中插入汇编代码,需要以asm关键字开头,中间四个部分用”:”分隔,如果你嵌入的汇编没有输入输出,或者更改资源,后面三项是可以省略的。

                 表1 GCC4内联汇编操作符节选
操作符 含义
r 通用寄存器R0~R15
m 一个有效内存地址
l 数据处理指令中的立即数
X 被修饰的操作符只能作为输出
            表2  GCC4中内联汇编修饰符
修饰符 说明
被修饰的操作符是只读的
= 被修饰的操作符只写
+ 被修饰的操作符具有可读写的属性
& 被修饰的操作符只能作为输出

uint32_t __get_PRIMASK(void)
{
    uint32_t result=0;
    __asm __volatile(                       \
        "MRS %0,primask"                     \
        :"=r"(result)                        \
        :                                     \
        :"memory"
    );
    return result;
}
void __set_PRIMASK(uint32_t priMask)
{
    __asm volatile (                        \
        "MSR primask, %0"                    \
        :                                    \
        :"r"(priMask)                         \
        :"memory"
     );
}
uint32_t enterCritical(void)
{
    uint32_t status=0;
    status=__get_PRIMASK();
    __asm volatile (                        \
        "cpsid i"                             \
        :                                     \
        :                                     \
        :"memory"
    );
    return status;
}
void exitCritical(uint32_t status)
{
    __set_PRIMASK(status);
}
 

 

你可能感兴趣的:(NXP S32K144 汇编小记)