C语言中内嵌汇编asm语法

2023-11-18

内联汇编使用“__asm”C++)和“asm”CC++)关键字声明,语法格式如下所示,内联汇编支持大部分的ARM指令,但不支持带状态转移的跳转指令,如BXBLX 指令

·__asm("instruction[;instruction]"); // 必须为单条指令

__asm{instruction[;instruction]}

· __asm

{

...

instruction

...

}

·asm("instruction[;instruction]"); // 必须为单条指令

asm{instruction[;instruction]}

· asm{

...

instruction

...

}

由于内联汇编嵌入在C或C++程序中,所有在用法上有其自身的一些特点。

① 如果同一行中包含多条指令,则用分号隔开。

② 如果一条指令不能在一行中完成,使用反斜杠“/”将其连接。

③ 内联汇编中的注释语句可以使用C或C++风格的。

④ 汇编语言中使用逗号“,”作为指令操作数的分隔符,所以如果在C语言中使用逗号必须用圆括号括起来。如,__asm {ADD x, y, (f(), z)}。

⑤ 内联汇编语言中的寄存器名被编译器视为C 或C++语言中的变量,所以内联汇编中出现的寄存器名不一定和同名的物理寄存器相对应。这些寄存器名在使用前必须声明,否则编译器将提示警告信息。

⑥ 内联汇编中的寄存器(除程序状态寄存器CPSR和SPSR外)在读取前必须先赋值,否则编译器将产生错误信息。下面的例子显示了内联汇编和真正汇编的区别。

int f(int x)

{

int r0;

__asm

{

ADD r0, x, 1

EOR x, r0, x

}

return x;

}

另外,需要特别指出的是在内联汇编中使用寄存器必须先声明其变量类型,如上例中的“int r0”。如果不在使用前进行声明,编译器将给出以下错误信息。

#1267-D: Implicit physicalregister R0 should be defined as a variable

内联汇编程序提供对ARM 处理器物理寄存器的非直接访问。如果在内联汇编程序指令中将某个ARM 寄存器用作操作数,它就成为相同名称的虚拟寄存器的引用,而不是对实际物理ARM寄存器的引用。例如内联汇编指令中使用了寄存器r0,但对于C编译器,指令中出现的r0只是一个变量,并非实际的物理寄存器r0,当程序运行时,可能是由物理寄存器r1来存放r0所代表的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中内嵌汇编asm语法 的相关文章

随机推荐

  • django restframework ModelViewSet使用自定义方法,路由

    一 先看原码 class ModelViewSet mixins CreateModelMixin mixins RetrieveModelMixin mixins UpdateModelMixin mixins DestroyModelM
  • PCM和I2S区别

    转自 http blog csdn net newtonnl article details 7878260 今天突然想到I2S和PCM接口都是数字音频接口 而我所见的蓝牙到cpu以及codec的音频接口都是用PCM接口 是不是两个接口有各
  • 高德地图使用鼠标工具(mouseTool)画覆盖物折线(mouseTool.polyline),光标使用十字架(crosshair)类型,不断出现closehand小手图标干扰

    今天在使用高德地图的时候 使用鼠标工具进行地图范围折线标注 但是发现鼠标在画第二个点 鼠标落下的时候会自动请求这个URL http webapi amap com theme v1 3 closedhand cur 如图 请求返回的是鼠标悬
  • 计算机中tan怎么计算公式,计算器arctan怎么按

    相信经历过高考的小伙伴 一定都记得三角函数吧 三角函数对于某些小伙伴恐怕是当年的一个痛 不过经历过高考 许多小伙伴就解脱啦 但也并非说完全就脱离了三角函数啦 在我们日后生活中 三角函数也是会碰到的 只不过可以用计算机了 因此还是需要好好掌握
  • Java 线程关闭

    Java线程关闭的方式 1 使用状态位 public class CloseThread extends Thread boolean flag true int index 0 Override public void run while
  • Docker Jenkins Maven SSH

    1 搜索jenkins镜像 docker search jenkins 2 拉去镜像 docker pull jenkinsci blueocean latest 3 宿主机安装maven 配置环境变量 4 运行容器 docker run
  • 短视频剪辑,超简单的教程

    视频如何剪辑 有没有好用的一些技巧呢 今天小编给大家分享一个新的剪辑技巧 它支持多段视频的同时剪辑 下面一起来试试吧 准备素材 将需要剪辑的多段短视频 音频 图片等等都保存在同一个文件夹之中 选择剪辑方案 运行 媒体梦工厂 如 分割视频 这
  • 访问阿里云mysql出现Access denied for user ‘root‘@‘xxxxx‘ (using password: YES)

    问题 在我连接远程阿里云的mysql时候 出现了Access denied for user root xxxxx using password YES 问题 排查 1 密码是否正确 2 阿里云的虚拟机是否开放了3306端口号 我的就是密码
  • Android EventBus保姆级源码解析(一)注册方法register

    记得上次写EventBus还是在上次 一年前 哈哈 转眼间又是一年了 发现对于EventBus的源码细节有点模糊 挖个坑捋捋EventBus的源码 由于项目中使用且当前最新版本源码变化不大 本文贴出的源码基于EventBus3 0 0 关于
  • 【面试必备】我跟面试官聊了一个小时线程池!

    大家好 这篇文章主要跟大家聊下 Java 线程池面试中可能会问到的一些问题 全程干货 耐心看完 你能轻松应对各种线程池面试 相信各位 Javaer 在面试中或多或少肯定被问到过线程池相关问题吧 线程池是一个相对比较复杂的体系 基于此可以问出
  • Spark集群搭建——SSH免密码验证登陆

    为什么80 的码农都做不了架构师 gt gt gt 机器准备 笔者有三台机器 左侧栏为ip 右侧为hostname 三台机器都有一个名为spark的用户 通过ping验证三台是可以通信的 192 168 248 150 spark mast
  • 前端之JavaScript

    目录 一 初始JavaScript 1 什么是JavaScript 2 JS和HTML以及CSS的关系 3 JS的组成 二 第一份JS代码 几种JS的书写形式 JS的输入输出 三 JS的核心语法 1 变量 几种类型 1 1 number数字
  • Tenserflow学习(二)——MNIST数据集分类三层网络搭建+Dropout+tensorboard可视化

    1 上代码 import tensorflow as tf from tensorflow examples tutorials mnist import input data 载入数据 one hot参数把标签转化到0 1之间 mnist
  • 将模型从 PyTorch 导出到 ONNX 并使用 ONNX 运行时运行它

    将模型从 PyTorch 导出到 ONNX 并使用 ONNX 运行时运行它 可选 在本教程中 我们描述了如何将 PyTorch 中定义的模型转换为 ONNX 格式 然后在 ONNX 运行时中运行它 ONNX 运行时是针对 ONNX 模型的以
  • 为何not in的筛选条件中不可以存在空值

    开发工具与关键技术 Oracle sql plus PLSQL Developer 作者 吴晓佩 撰写时间 2019年4月6日 上次我在子查询中用多行操作符 not in 进行数据查询时出现过此种情况 数据是空的 为了验证一下结果 我用in
  • Latex引用图片 发现 显示的图片标号不对

    在latex的图片代码中 当图片的label写在如下位置时 begin figure centering 居中 centering 子图居中 includegraphics width 8cm xxx pdf label oo 图片引用标记
  • mongodb如何实现数组对象求和

    原本地址 mongodb如何实现数组对象求和 mongodb在计算集合数组值时候 我们通常会想到使用 group与 sum 但是如果是数组里面多个json对象 并且还需要根据条件过滤多个对象的内容该如何处理 现在让我们来实现它 假设mong
  • 转行做Linux运维工程师,简历的项目经验应该怎么写比较好?

    转行做linux运维工程师 首先要了解linux运维要做多少事情 需要什么基础 然后根据自己的情况进行有的放矢的追踪学习 先了解下做linux运维工程师需要做的事情 1 熟悉linux命令基本操作 玩不转基本操作别的都是空中楼阁 2 熟悉t
  • PNG文件格式分析

    目录 PNG简介 PNG文件组成成分是什么 File header Chunks 关键数据块 辅助数据块 实例分析 分析下图 File header Chunks 关键数据块分析 辅助数据块分析 PNG总结 参考文献 PNG简介 PNG是2
  • C语言中内嵌汇编asm语法

    内联汇编使用 asm C 和 asm C和C 关键字声明 语法格式如下所示 内联汇编支持大部分的ARM指令 但不支持带状态转移的跳转指令 如BX和BLX 指令 asm instruction instruction 必须为单条指令 asm