GCC嵌入汇编

这篇博客介绍了如何在 GCC 中使用嵌入式汇编,包括指令格式、输出、输入和修改部分的详细解释,并提供了一个延迟循环的实例。

 

推荐一个文档:Assembly In linux

不知道谁写的,网上找了下载吧,是中文的。

其中有一段精华如下:

 

嵌入式汇编的一般形式:
__asm__ __volatile__ ("<asm routine>" : output : input : modify);
其中,__asm__表示汇编代码的开始,其后可以跟__volatile__(这是可选项),其
含义是避免“asm”指令被删除、移动或组合;然后就是小括弧,括弧中的内容是我们介
绍的重点:
· "<asm routine>"为汇编指令部分,例如,"movl %%cr0,%0/n/t"。数字前加前缀“%“,
如%1,%2等表示使用寄存器的样板操作数。可以使用的操作数总数取决于具体CPU
中通用寄存器的数量,如Intel可以有8个。指令中有几个操作数,就说明有几个变
量需要与寄存器结合,由gcc在编译时根据后面输出部分和输入部分的约束条件进
行相应的处理。由于这些样板操作数的前缀使用了”%“,因此,在用到具体的寄存
器时就在前面加两个“%”,如%%cr0。
· 输出部分(output),用以规定对输出变量(目标操作数)如何与寄存器结合的约
束(constraint),输出部分可以有多个约束,互相以逗号分开。每个约束以“=”开
头,接着用一个字母来表示操作数的类型,然后是关于变量结合的约束。例如,上例
中:
:"=r" (__dummy)__dummy 存放在这个寄存器中,但如果是:
:“=m”(__dummy)
“=m”就表示相应的目标操作数是存放在内存单元__dummy中。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值