当前位置: 首页 > news >正文

模板网站平台上海汽车网站建设

模板网站平台,上海汽车网站建设,方维服务公司服务范围,阿里云建设网站编程环境是#xff1a;stm32cubeIde 原因#xff1a;很多操作需要使用底层来做#xff0c;比如中断时的上下文数据保存。也就是说用到汇编来实现。 疑问#xff1a;c语言怎么才能跟汇编很好的兼容在一起呢#xff1f;必将是我下一步的必经探索之路了。 一、C语言和汇编…编程环境是stm32cubeIde  原因很多操作需要使用底层来做比如中断时的上下文数据保存。也就是说用到汇编来实现。 疑问c语言怎么才能跟汇编很好的兼容在一起呢必将是我下一步的必经探索之路了。 一、C语言和汇编兼容格式 asm(    汇编字符串   :  输出约束字符串   :  输入约束字符串   : 可能被使用了的寄存器   ); 汇编字符串 mov   %[c] , r0    mov  r0,r1     add  %[c] , %[a], %[b] 输出约束操作可以类比函数的返回值 [c] r(c)    输入约束操作 可以类比函数的参数 [a] r(a), [b] r(b)  可能被使用了的寄存器 有的地方叫被破坏了的寄存器: r0  r1 二、解释一下约束符 汇编代码字符串包含ARM汇编指令的字符串。我们可以在该字符串中使用%[name]的形式来引用C语言变量。输入约束用于将C语言变量映射到ARM寄存器。输入约束的形式为约束代码(变量名)。例如r(a)表示将变量a映射到一个通用寄存器。输出约束用于将ARM寄存器的值映射回C语言变量。输出约束的形式为约束代码(变量名)。例如r(c)表示将一个通用寄存器的值赋给变量 c.Clobber列表用于列出内联汇编代码可能修改的寄存器。这有助于编译器在生成代码时正确处理这些寄存器。Clobber列表的形式为寄存器名多个寄存器名用逗号分隔。例如r0, r1, cc表示内联汇编代码可能会修改r0、r1寄存器和条件码寄存器。  三、操作数约束符 r表示通用寄存器。例如r(a)表示将变量a映射到一个通用寄存器。l表示一个立即数。例如l(a)表示将变量a视为一个立即数。m表示一个内存操作数。例如m(a)表示将变量a视为一个内存操作数。 四、寄存器约束符 寄存器约束用于指定内联汇编代码中使用的具体寄存器。寄存器约束的形式为约束代码(寄存器名)。例如r(r0)表示将变量映射到r0寄存器。 五、案例 1、加法 #include stdio.h int main(void) {         int a 10, b 20, c; asm (                 ADD %[c], %[a], %[b]                 : [c] r (c)                 : [a] r (a),                   [b] r (b)         ); printf(The c   is: %d\n, c);         return 0; } 我们使用ADD指令将变量a和b相加并将结果存储在变量  c 中。我们使用输入约束r(a)和r(b)将变量a和b映射到寄存器输出约束r( c )将寄存器映射到变量 c 。 2、数组求和 #include stdio.h int main(void) {         int  array[] {1, 2, 3, 4, 5};         int  length sizeof(array) / sizeof(array[0]);         int  sum 0; asm (                 MOV r1, #0\n     // 初始化r1sum为0                 MOV r2, #0\n     // 初始化r2索引为0                 loop:\n             // 设置循环标签                 LDR r0, [%[array], r2, LSL #2]\n  // 读取数组元素到r0                 ADD r1, r1, r0\n  // 将r0当前数组元素累加到r1sum                 ADD r2, r2, #1\n  // 增加索引r2                 CMP r2, %[length]\n // 比较索引r2和数组长度length                 BLT loop\n       // 如果索引小于长度跳回循环开始                 :         //若是省略也必须有冒号                 : [array] r(array),                   [length] r(length)                 : r0, r1, r2, cc             ); asm( mov  %[sum],r1:[sum] r(r1) ); printf(The sum of the array is: %d\n, sum);         return 0; } 使用输入约束r(array)和r(length)将数组指针和数组长度映射到寄存器输出约束r(sum)将寄存器映射到变量sum。
http://www.dnsts.com.cn/news/83173.html

相关文章:

  • 同时优化几个网站网站建设费 会计分录
  • 高端响应式网站建设服务器销售网站源码
  • 陕西做天然气公司网站深圳正规煤气公司
  • asp技术做网站网站建设常用的方法
  • 自有服务器可以做网站吗广告设计培训机构
  • 服务器建站用哪个系统好自己编辑网站怎么做的
  • 做网站用什么软件知乎wordpress文章商品模板
  • 网站备案要营业执照原件吗开发者模式是干什么的
  • 常德建设网站长沙制作公园仿竹围栏供货商
  • 建设工程现行标准查询网站合肥做网站专家
  • 乐清市住房和城乡建设规划局网站中瑞网络网站建设流程
  • 怎么在公众号上做网站电商网站优化方案
  • 企业网站源码搜一品资源网西宁网站建设嘉荐君博l
  • 网站联系我们的地图怎么做的深圳市造价信息网
  • 平台网站建设 厦门宁夏吴忠网站建设
  • 红酒商城网站建设方案楚雄企业网站建设公司
  • 深圳网站建设联雅wordpress博客的搭建
  • flashfxp上传网站模板开发网站的流程步骤
  • 网站主页调用wordpress伪静态插件
  • 太原建设网站公司网页制作公司的职员
  • 北京市建设工程质量监督站网站wordpress 新建栏目
  • 上海 网站建郑州黑帽seo培训
  • h5做网站教程dede网站转移
  • 网站嵌套代码百度指数的各项功能
  • 想做cpa 没有网站怎么做口碑好的网站建设多少钱
  • 兰溪网站建设五台网站建设
  • 外网设计网站网站建设怎么找到客户
  • 手机网站导航设计模板亚马逊雨林探险之旅作文
  • 网站上不去首页seo要怎么办青岛的互联网公司
  • 网站源文件做网站一个月工资