查看: 2624|回复: 3

[已解决] 关于__ASM volatile 的代码疑惑(已解决)

[复制链接]

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
发表于 2013-9-2 09:57:41 | 显示全部楼层 |阅读模式
 /** \brief  Get Priority Mask
 
    This function returns the current state of the priority mask bit from the Priority Mask Register.
 
    \return               Priority Mask value
 */
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void)
{
  uint32_t result;
 
  __ASM volatile ("MRS %0, primask" : "=r" (result) );
  return(result);
}
请问这段设置PRIMASK寄存器的代码如何看啊,MRS我知道是把特殊寄存器的值移到通用寄存器,但是这句话的语法不太懂,%0什么意思啊,我猜是把后面的result代替到前面的%0,但是为什么又有一个:"=r"
 
我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-9-2 13:15:54 | 显示全部楼层

回复:关于__ASM volatile 的代码疑惑

 请问你用的是哪款芯片,这段代码出现在什么地方(飞思卡尔官方例程中的哪个源文件中)?
回复 支持 反对

使用道具 举报

该用户从未签到

21

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
330
最后登录
1970-1-1
 楼主| 发表于 2013-9-2 14:47:07 | 显示全部楼层

回复:关于__ASM volatile 的代码疑惑(正解)

回复第 2 楼 于2013-09-02 13:15:54发表:
 请问你用的是哪款芯片,这段代码出现在什么地方(飞思卡尔官方例程中的哪个源文件中)?
 

这段代码是我看的CMSIS中core_cmFunc.h文件里面的,已经弄明白了,GCC内联汇编之前不太清楚,查阅了一些资料,
__asm__(assembler template
       : output operands                  /* optional */
       : input operands                   /* optional */
       : list of clobbered registers      /* optional */
       );
 
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-9-2 15:04:48 | 显示全部楼层

回复:关于__ASM volatile 的代码疑惑

 好的,欢迎使用飞思卡尔与非网社区。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-8-6 09:54 , Processed in 0.093281 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表