您的位置: 首页 计算机类> Linux认证> 考试介绍
Linux认证介绍 linux认证题库 linux认证证书 linux考试
公务员考试辅导课程

Linux汇编语言开发指南(3)

发布时间:11-21

来 源:100ksw.com整理

页 数:4页

上一篇:Linux使用基本知识:修改环境变量PATH

下一篇:Linux下常用配置文件及常用命令介绍


第4页的内容  printf("Result: %d, %d\\n", a, b);
}

 

    上面的程序完成将变量a的值赋予变量b,有几点需要说明:

    变量b是输出操作数,通过%0来引用,而变量a是输入操作数,通过%1来引用。
输入操作数和输出操作数都使用r进行约束,表示将变量a和变量b存储在寄存器中。输入约束和输出约束的不同点在于输出约束多一个约束修饰符’=’。
    在内联汇编语句中使用寄存器eax时,寄存器名前应该加两个’%’,即%%eax。内联汇编中使用%0、%1等来标识变量,任何只带一个’%’的标识符都看成是操作数,而不是寄存器。
内联汇编语句的最后一个部分告诉GCC它将改变寄存器eax中的值,GCC在处理时不应使用该寄存器来存储任何其它的值。
    由于变量b被指定成输出操作数,当内联汇编语句执行完毕后,它所保存的值将被更新。
在内联汇编中用到的操作数从输出部的第一个约束开始编号,序号从0开始,每个约束记数一次,指令部要引用这些操作数时,只需在序号前加上’%’作为前缀就可以了。需要注意的是,内联汇编语句的指令部在引用一个操作数时总是将其作为32位的长字使用,但实际情况可能需要的是字或字节,因此应该在约束中指明正确的限定符:

限定符                     意义
"m"、"v"、"o"              内存单元
"r"                        任何寄存器
"q"                        寄存器eax、ebx、ecx、edx之一
"i"、"h"                   直接操作数
"E"和"F"                   浮点数
"g"                        任意
"a"、"b"、"c"、"d"         分别表示寄存器eax、ebx、ecx和edx
"S"和"D"                   寄存器esi、edi
"I"                        常数(0至31)

    八、小结

    Linux操作系统是用C语言编写的,汇编只在必要的时候才被人们想到,但它却是减少代码尺寸和优化代码性能的一种非常重要的手段,特别是在与硬件直接交互的时候,汇编可以说是最佳的选择。Linux提供了非常优秀的工具来支持汇编程序的开发,使用GCC的内联汇编能够充分地发挥C语言和汇编语言各自的优点。




Google
 

     

考试信息

热点

课程

更新

©2005-2006 100ksw.com 版权所有 皖ICP备06013378号