Linux汇编入门:AT&T与Intel语法对比详解

需积分: 3 3 下载量 128 浏览量 更新于2024-10-16 收藏 312KB DOC 举报
本文档旨在为对汇编语言感兴趣或想要深入了解基础概念的读者提供一个全面的入门指南,特别是针对Linux环境下汇编语言的差异。文章着重讲解了两种主要的汇编格式:Intel风格和AT&T风格,它们在Linux系统中的广泛应用。 首先,Intel风格的汇编通常在DOS/Windows环境中常见,而Unix和Linux更倾向于使用AT&T风格。以下是两者的主要区别: 1. **寄存器命名约定**:在AT&T格式中,寄存器名前需加上'%'作为前缀,如`pushl%eax`,而在Intel格式中,如`pusheax`,寄存器名无需前缀。 2. **立即数表示**:在AT&T格式中,使用`$`前缀表示立即操作数,如`pushl$1`,而在Intel格式中,直接表示为`push1`。 3. **操作数位置**:AT&T格式中,目标操作数位于源操作数右侧,如`addl$1,%eax`;而Intel格式则相反,目标操作数在左侧。 4. **字长表示**:AT&T使用后缀`b`、`w`和`l`区分字节、字和长字,如`movbval,%al`,Intel格式则使用前缀,如`moval,byteptr val`。 5. **转移和调用指令**:AT&T的绝对转移和调用指令前需加`*`,如`ljump$section, $offset`,而Intel格式的相应指令为`jmpfar`和`callfar`。 6. **远程指令**:AT&T使用`ljump`和`lcall`,对应Intel的`jmpfar`和`callfar`,并包含目标地址。 7. **返回指令**:在AT&T格式中,远程返回指令为`lret$sta`,在Intel格式中可能有不同的形式。 通过理解这些差异,学习者可以逐步适应Linux汇编语言的特性和结构,这对于编写高效的低级程序,优化性能,以及理解和修改操作系统内核至关重要。无论你是初学者还是希望熟悉新环境的开发者,这份教程都能提供有用的参考。尽管作者提醒可能不完美,但提供的1分评级显示其价值,值得一读。