How to Use Inline Assembly Language in C Code(C语言内联汇编)--continuing...

希望通过学习弄清楚如下问题:

  1. 什么内联?什么是内联汇编?
  2. 内联有什么优缺点?可以用来解决什么问题?
  3. 什么是 base asm?
  4. 什么是 extended asm?
  5. 都有 base asm了,为什么要extended asm?是为了解决什么问题呢?


下面是对GCC官方文档C语言内联汇编部分尝试的原创翻译,错漏及理解不足之处在所难免,欢迎留言交流,我会尽快反馈。

6.47.2 Extended Asm - Assembler Instructions with C Expression Operands

extended asm使得我们可以在汇编程序中读写C变量,还可以从汇编代码中跳转到C标签。extended asm 语法使用冒号':'分割 assembler template 之后的操作数:

		asm asm-qualifiers ( AssemblerTemplate
							: OutputOperands 
							[ : InputOperands
							[ : Clobbers ] ])

		asm asm-qualifiers ( AssemblerTemplate 
							: 
							: InputOperands
							: Clobbers
							: GotoLabels)

上面第二个格式中,asm-qualifiers 包含 goto (第一种格式不包含)([ ]表示可选)。

asm 关键字是一个GNU扩展。当你编写的代码将会使用 -ansi 和不同的 -std 选项进行编译时,请使用 __asm__ 代替 asm(参看 Alternate Keywords

curiousXia:-ansi -std配置指向不同的C语言版本,当程序需要兼容多个C版本时,建议编码时将asm替换成__asm__。

Qualifiers(限定符)

  • volatile
    extended asm 语句的典型用途是操作输入值产生输出值。但是,有时候我们的asm语句可能产生副作用。如此,我们便需要使用 volatile 限定符来禁用某些优化(以避免这些副作用的产生)。参看 Volatile

  • inline
    如果使用 inline 限定符,那么出于内联的目的,asm 语句的大小需要尽可能小(参看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值