- 55
- 0
- 约1.96万字
- 约 6页
- 2016-03-12 发布于山西
- 举报
gcc嵌入式汇编1
内核源码学习:Gcc嵌入式汇编 (一)_Aurola_百度空间 Page 1 of 6
mousehecat | | 退出
Aurola
星际之门亚特兰蒂斯
主页 博客博客 相册 | 个人档案 | 好友
博客博客
查看文章查看文章
查查看文章看文章
内核源内核源码学码学习习:: 嵌入式嵌入式汇编汇编 (一(一))
内内核源核源码码学学习习::Gcc嵌入式嵌入式汇编汇编 ((一一))
2008-08-12 00:57
GCC支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM——GCC 内联汇编。这是一个非常有用的功能,有利于我们将一些
C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写C /C++代码中使用汇编编写简洁高效的代码。
基本基本内联汇编内联汇编
1.基本基本内内联汇编联汇编
GCC中基本的内联汇编非常易懂,我们先来看两个简单的例子:
__asm__(movl %esp,%eax); // 看起来很熟悉吧!
或者是
__asm__(
movl $1,%eax // SYS_exit
xor %ebx,%ebx
int $0x80
);
或
__asm__(
movl $1,%eax\r\t \
xor %ebx,%ebx\r\t \
int $0x80 \
);
基本内联汇编的格式是
__asm__ __volatile__(Instruction List);
、、
1、、__asm__
__asm__是GCC关键字asm的宏定义:
#define __asm__ asm
__asm__或asm用来声明一个内联汇编表达式,所以任何一个内联汇编表达式都是以它开头的,是必不可少的。
、、
2、、Instruction List
Instruction List是汇编指令序列。它可以是空的,比如:__asm__ __volatile__(); 或__asm__ ();都是完全合法的内联汇编表达式,只不过这两条语句
没有什么意义。但并非所有Instruction List为空的内联汇编表达式都是没有意义的,比如:__asm__ (:::memory); 就非常有意义,它向GCC声明:
“我对内存作了改动”,GCC在编译的时候,会将此因素考虑进去。
我们看一看下面这个例子:
$ cat example1.c
int main(int __argc, char* __argv[])
{
int* __p = (int*)__argc;
(*__p) = 9999;
//__asm__(:::memory);
if((*__p) == 9999)
return 5;
return (*__p);
}
__p 9999 if
在这段代码中,那条内联汇编是被注释掉的。在这条内联汇编之前,内存指针
您可能关注的文档
- c语言深度解剖(完美高清文字版).pdf
- dcfw-1800ges防火墙快速配置手册--for v3x版本.pdf
- ebox-2300_wifi_installation.pdf
- fortigate防火墙安全配置规范.pdf
- fbi秘籍:如何读懂肢体语言(图文原版).pdf
- gartner如何定义下一代防火墙-sinogrid.pdf
- freelink wifi hdmi 无线媒体分享器使用说明书.pdf
- gbt1.1-2009培训教材(福建标准院内部培训教材).pdf
- gcc hacks in the linux kernel.pdf
- gcc internals and porting.pdf
原创力文档

文档评论(0)