[转]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)
);
本例中,汇编程序模板由汇编指令组成。输入操
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
Linux下的中文Latex
Latex(latex-project.org/)是Tex的扩展,是一种广泛的用于科学与工程领域的文字排版工具。特别在欧洲的大学,科研单位,几乎所有的论文,报告都是在Tex/Latex系列工具完成的。
目前,Tex/Latex正逐步被国内的科研人员接受。尤其是在windows平台下,已经成形的CTEX无疑是对Tex/Latex推广的极大促进 ......
linux进程控制-exec系列 说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是: #include <unistd.h>
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char ......
<!--
@page { margin: 0.79in }
P { margin-bottom: 0.08in }
-->
How
to restore data after ubuntu can't boot
If you have another ......
--保存当前防火墙设置
service iptables save
--查看配置文件
iptables-save
--编辑配置文件
vi /etc/sysconfig/iptables 添加相应的规则
设置可以通过防火墙
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
注意修改/etc/sysconfig/iptables后不要再使用service iptables s ......