内联汇编简要笔记

内联汇编格式

asm volatile(
	"Assembler code";
	:outputOperands
	:inputOperands
	[:Clobbers])
)

Assembler code:汇编代码部分,需要使用“”包括,所有汇编代码必须用双引号括起来,如果多行汇编代码,每一条语句都要用双引号括起来,代码后面加上换行符(“\n"或”\n\t"),具体形式;
outputOperands:输出操作数列表;
inputOperands:输入操作数的列表;
Clobbers:受损坏的部分,“memory”告诉GCC内嵌汇编指令 改变了内存的值,强迫编译器在执行该汇编代码前,存储所有缓存的值,在执行完汇编代码之后重新加载该值,目的是防止编译乱序; “cc”:表示内嵌汇编代码影响状态寄存器相关的标志位。

输出列表和输入列表中的变量按顺序编号,从0开始。

操作数格式

每一个操作数,最多由四部分组成:

[name]"modifier+constraint"(C expression)

name:别名,可选;
modifier:修改符,要用双引号括起来;
constraint:限定符,要用双引号括起来;
c表达式:用小括号括起来;

限定符

操作数在这里的作用是将C语言定义的变量与汇编中使用的变量进行一 一对应,但并不是所有的汇编指令都可以接受任何类型变量,因此汇编器需要知道这些变量到底用在什么地方,传递前做一些转换。常用限定符如下表

限定符含义
r通用寄存器
f浮点寄存器
m内存地址

修改符

在限定符之前,可选,为空的话,表明该操作数是只读的。

修改符含义
=只写操作数,一般用于输出操作数
+可读可写
&寄存器只能用于输出

修改寄存器列表

类型作用
r0…r15告诉编译器汇编代码中修改了通用寄存器r0…r15
cc告诉编译器汇编代码会导致CPU状态位的改变
memory告诉编译器汇编代码会读取或修改内存中某个地址存放的值

“memory”告诉GCC内嵌汇编指令 改变了内存的值,强迫编译器在执行该汇编代码前,存储所有缓存的值,在执行完汇编代码之后重新加载该值,目的是防止编译乱序; “cc”:表示内嵌汇编代码影响状态寄存器相关的标志位。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值