易截截图软件、单文件、免安装、纯绿色、仅160KB

[转]Linux 中 x86 的内联汇编

Linux 中 x86 的内联汇编
级别: 初级
Bharata B. Rao (rbharata@in.ibm.com)IBM Linux 技术中心,IBM 软件实验室,印度
2001 年 3 月 01 日
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" 结构
asm ( assembler template

: output operands (optional)

: input operands (optional)

: list of clobbered registers
(optional)

);
本例中,汇编程序模板由汇编指令组成。输入操


相关文档:

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

U盘安装Linux,告别光盘了

1、将Grub安装到u盘(通常需要在Linux中进行)
在Ubuntu9.10中安装grub2如下:
sudo grub-install --root-directory=/media/sdb1 /dev/sdb
##注解:上述命令中的路径名可能会不同(/media/sdb1中sdb1是u盘挂载后的文件名,视各人的具体情况而定)
 
2、从网上下载两个文件vmlinuz和initrd.gz
##你会发现其实在你所 ......

linux多线程编程 相关概念

学习Linux多进程编程
一、进程的定义:程序执行和资源管理的最小单位。
二、进程控制:
(1)进程标识: 进程标识  子进程号  父进程号
 头文件  #include<unistd.h>  #include<unistd.h>
 函数功能  取得当前进程的进程号  取得当前进程的父进程号
 函 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号