注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时间记录器

记录我的Linux、Android学习之路

 
 
 

日志

 
 

内嵌汇编 %0,%1 是什么  

2011-06-17 19:21:05|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉
GCC对这些操作有哪些限制条件。例如在下面的汇编语句:

__asm__ __violate__
("movl %1,%0" : "=r" (result) : "m" (input));

“movl %1,%0”是指令模板;“%0”和“%1”代表指令的操作数,称为占位符,内嵌汇编靠它们将C
语言表达式与指令操作数相对应。指令模板后面用小括号括起来的是C
语言表达式,本例中只有两个:“result”和“input”,他们按照出现的顺序分别与指令操作
数“%0”,“%1,”对应;注意对应顺序:第一个C表达式对应“%0”;第二个表达式对应“%1
”,依次类推,操作数至多有10个,分别用“%0”,“%1”….“%9,”表示。在每个操作数前
面有一个用引号括起来的字符串,字符串的内容是对该操作数的限制或者说要求。“result”前面
的限制字符串是“=r”,其中“=”表示“result”是输出操作数,“r
”表示需要将“result”与某个通用寄存器相关联,先将操作数的值读入寄存器,然后
在指令中使用相应寄存器,而不是“result”本身,当然指令执行完后需要将寄存器中的值
存入变量“result”,从表面上看好像是指令直接对“result”进行操作,实际上GCC
做了隐式处理,这样我们可以少写一些指令。“input”前面的“r”表示该表达式需要先放入
某个寄存器,然后在指令中使用该寄存器参加运算。
  评论这张
 
阅读(2332)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017