C/C++知识点之C指针原理(8)-C内嵌汇编
小标 2019-02-19 来源 : 阅读 605 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之C指针原理(8)-C内嵌汇编,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之C指针原理(8)-C内嵌汇编,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C/C++知识点之C指针原理(8)-C内嵌汇编


#include <stdio.h>
int main(void){
    int xa=6;
    int xb=2;
    int result;
   //使用占位符,由r表示,编译器自主选择使用哪些寄存器,%0,%1。。。表示第1、2。。。个变量
    asm volatile(
    "add %1,%2\n\t" 
    "movl %2,%0"
     :"=r"(result):"r"(xa),"r"(xb));    
    printf("%d\n",result);
    return 0;
}


result、xa、xb绑定的寄存器由编译器决定,前面的例子中我们采用直接指定的方式,在这里我们改成由编译器


自主选择,"r"是占位符,表示由编译器自主选择使用哪些寄存器,不指定哪个变量绑定在哪个寄存器上,


:"=r"(result):"r"(xa),"r"(xb)


那我们如何知道这些变量绑定在哪些寄存器上呢,不知道绑定的寄存器,如何对变量进行操作呢,可以使用


%0,%1这样的符号来代替要操作的寄存器,%后的数字表示第几个变量,如:%0,%1。。。表示第1、2。。。个变量。


:"=r"(result):"r"(xa),"r"(xb)


上面这个输出和输入列表已经指定了变量的顺序,


result是第0个,xa是第1个,xb是第2个    


   下面的例子完成   xb=xb-xa的计算,问题出现了,可能会导致xb被分配了2个寄存器:


    :"=r"(xb):"r"(xa),"r"(xb));  


    使用引用占位符能有效地使用可用寄存器,在这里我们指定xb使用第0个变量绑定的寄存器


    :"=r"(xb):"r"(xa),"0"(xb)); 


    第0个变量就是xb,即xb绑定的寄存器被修改后,结果仍写回原寄存器


    下面是完整例子


#include <stdio.h>
int main(void){
int xa=2;
int xb=6;
asm volatile(
"subl %1,%0\n\t" 
:"=r"(xb):"r"(xa),"0"(xb));    
printf("%d\n",xb);
return 0;
}


  我们编译运行一下


   $ gcc -o test test.c
   $  ./test


   4
  
   用数字来表示变量的顺序也许很麻烦,我们可以使用更简单的方法,使用“[标识]”的格式标记绑定后的变量。  下面的代码完成xb=xb+xa的计算


#include <stdio.h>
int main(void){
    int xa=6;
    int xb=2;
    asm volatile(
    "add %[mya],%[myb]\n\t" 
     :[myb]"=r"(xb):[mya]"r"(xa),"0"(xb));    
    printf("%d\n",xb);
    return 0;
}

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程