首页 运维 网络学院 查看内容

Linux操作系统中x86的内联汇编方法

2005-6-13 04:56 599 0

摘要:   Linux 中 x86 的内联汇编    将各个部分组合起来    developerWorks    文档选项    将此页作为电子邮件发送      最新推荐    Java ...
关键词: 操作数 mdash Linux 语法 后缀 汇编程序 eax 指令 寄存器 编译器

  Linux 中 x86 的内联汇编    将各个部分组合起来    developerWorks    文档选项    将此页作为电子邮件发送      最新推荐    Java 应用开发源动力 - 下载免费软件,快速启动开发    级别: 初级    Bharata B. RaoIBM Linux 技术中心,IBM 软件实验室,印度    Bharata B. Rao 提供了在 Linux 平台上使用和构造 x86 内联汇编的概括性介绍。他介绍了内联汇编及其各种用法的基础知识,提供了一些基本的内联汇编编码指导,并解释了在 Linux 内核中内联汇编代码的一些实例。    如果您是 Linux 内核的开发人员,您会发现自己经常要对与体系结构高度相关的功能进行编码或优化代码路径。您很可能是通过将汇编语言指令插入到 C 语句的中间(又称为内联汇编的一种方法)来执行这些任务的。让我们看一下 Linux 中内联汇编的特定用法。(我们将讨论限制在 IA32 汇编。)    GNU 汇编程序简述    让我们首先看一下 Linux 中使用的基本汇编程序语法。GCC(用于 Linux 的 GNU C 编译器)使用 AT&T 汇编语法。下面列出了这种语法的一些基本规则。(该列表肯定不完整;只包括了与内联汇编相关的那些规则。)    寄存器命名    寄存器名称有 % 前缀。即,如果必须使用 eax,它应该用作 %eax.    源操作数和目的操作数的顺序    在所有指令中,先是源操作数,然后才是目的操作数。这与将源操作数放在目的操作数之后的 Intel 语法不同。    mov %eax, %ebx, transfers the contents of eax to ebx.    作数大小    根据操作数是字节 (byte)、字 (word) 还是长型 (long),指令的后缀可以是 b、w 或 l.这并不是强制性的;GCC 会尝试通过读取操作数来提供相应的后缀。但手工指定后缀可以改善代码的可读性,并可以消除编译器猜测不正确的可能性。    movb %al, %bl —— Byte move    movw %ax, %bx —— Word move    movl %eax, %ebx —— Longword move  立即操作数    通过使用 $ 指定直接操作数。    movl $0xffff, %eax —— will move the value of 0xffff into eax register.    间接内存引用    任何对内存的间接引用都是通过使用 ( ) 来完成的。    movb (%esi), %al —— will transfer the byte in the memory    pointed by esi into al    register    内联汇编    GCC 为内联汇编提供特殊结构,它具有以下格式:    GCG 的 "asm" 结构  
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部