atomic

movx source, destination

source  和 destination 的值可以是内存地址,存储在内存中的数据值,指令语句中定义的数据值,或者是寄存器。

GNU汇编器为mov指令添加了一个维度,在其中必须声明要传送的数据元素的长度。通过把一个附加字符添加到mov助记符来声明这个长度。因此指令就变成了如下:

movx

其中 x 可以是下面的字符:l 用于32位的长字值,w用于16位的字值,b用于8位的字节值

movl %eax, %ebx #把32位的EAX寄存器传送給32位的EBX寄存器值

movw %ax, %bx 

movb %al, %lx


neg 求补指令,把他之后的操作数求补(先求反再加1)


GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM--GCC内联汇编。这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写C/C++代码中使用汇编编写简洁高效的代码。

基本内联汇编

GCC中基本的内联汇编非常易懂,我们先来看两个简单的例子:

__asm__("movl %esp, %eas");

1 __asm__

__asm__是GCC关键字asm的宏定义:

#define __asm__ asm

__asm__或 asm用来声明一个内联汇编表达式,所以任何一个内联汇编表达式都是以它开关的,是必不可少的。

2 instruction list

instruction list 是汇编指令序列。它可以是空的,比如: __asm__ __violate__(""); 或 __asm__(""); 都是完全合法的内联汇编表达式,只不过这两条语句没有什么意义。但并非所有Instruction list 为空的内联汇编表达式都是没有意义的,比如:__asm__("":::"memory");就非常有意义,它向GCC表明:"我对内存作了改动",GCC在编译的时候,会将此因素考虑进去。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值