linux smp lock 锁总线 内嵌汇编,GCC内嵌汇编

的C语言变量与指令操作数之间的关系,例如是将变量放在寄存器中还是放在内存中等,下表列出了常用的限定字母。

分类限定符描述通用寄存器

“a”将输入变量放入eax

这里有一个问题:假设eax已经被使用,那怎么办?

其实很简单:因为GCC知道eax已经被使用,它在这段汇编代码的起始处插入一条语句pushl %eax,将eax内容保存到堆栈,然后在这段代码结束处再增加一条语句popl %eax,恢复eax的内容

“b”将输入变量放入ebx

“c”将输入变量放入ecx

“d”将输入变量放入edx

“s”将输入变量放入esi

“d”将输入变量放入edi

“q”将输入变量放入eax,ebx ,ecx ,edx中的一个 “r”将输入变量放入通用寄存器,也就是eax ,ebx,ecx,edx,esi,edi中的一个 “A”把eax和edx,合成一个64位的寄存器(uselong longs)

“m”内存变量

“o”操作数为内存变量,但是其寻址方式是偏移量类型,也即是基址寻址,或者是基址加变址寻址

“V”操作数为内存变量,但寻址方式不是偏移量类型

“,” 操作数为内存变量,但寻址方式为自动增量

“p”操作数是一个合法的内存地址(指针)

寄存器或内存

“g” 将输入变量放入eax,ebx,ecx ,edx中的一个或者作为内存变量“X”操作数可以是任何类型

立即数

“I” 0-31 之间的立即数(用于32位移位指令)

“J” 0-63 之间的立即数(用于64 位移位指令)

“N” 0-255 ,之间的立即数(用于out 指令)

“i” 立即数

“n” 立即数,有些系统不支持除字以外的立即数,这些系统应该使用“n”而不是“i” 匹配 “0”,“1 ,”... “9 ” 表示用它限制的操作数与某个指定的操作数匹配,也即该操作数就是指定的那个操作数,例如用“0 ”去描述“%1”操作数,那么“%1”引用的其实就是“%0”操作数,注意作为限定符字母的0-9 ,与指令中的“%0”-“%9”的区别,前者描述操作数,后者代表操作数。后面有详细描述& 该输出操作数不能使用过和输入操作数相同的寄存器后面有详细描述操作数类型

“=” 操作数在指令中是只写的(输出操作数)

“+” 操作数在指令中是读写类型的(输入输出操作数)

浮点数

“f”浮点寄存器

“t”第一个浮点寄存器

“u”第二个浮点寄存器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值