Linux汇编语言入门:AT&T与Intel格式详解

需积分: 10 0 下载量 29 浏览量 更新于2024-09-09 收藏 124KB DOC 举报
本文档是一份详细的Linux汇编语言开发指南,主要针对的是从DOS/Windows环境下的Intel风格汇编语言向Unix和Linux系统中更常用的AT&T格式的转换和适应。以下几点是文档的核心知识点: 1. **语法差异**:文档强调了两种汇编格式的主要区别。在AT&T格式中,寄存器名需使用'%'前缀,如`pushl%eax`,而在Intel格式中则无需前缀,如`pusheax`。操作数表示上,AT&T使用`$`前缀表示立即数,如`pushl$1`,而Intel直接写数字,如`push1`。 2. **操作数位置**:在AT&T中,目标操作数在源操作数的右侧,如`addl$1,%eax`,而在Intel中,目标操作数在左侧,如`addeax,1`。字长在AT&T中通过操作符后缀决定,如`movbval,%al`,而在Intel中用特定前缀如`byteptr`或`wordptr`。 3. **转移和调用指令**:在AT&T中,转移和调用指令前需加'*',如`ljump$section,offset`,在Intel中则不需要,如`jmpfarsection:offset`。远程子调用和返回指令分别为`lcall$section,offset`和`lret$stack_adjust`在AT&T中,而在Intel中分别为`callfar section:offset`和`retfar stack_adjust`。 4. **内存操作**:在AT&T格式中,内存操作数的寻址方式使用特定的格式,这在文档中详细说明了具体的实现方式。 这份指南对于想要从其他操作系统环境转向Linux汇编编程的开发者来说,是非常实用的参考资料,它帮助他们理解和掌握在Linux环境下编写高效、兼容的汇编代码所需的语法和技巧。无论是初学者还是经验丰富的程序员,都需要了解并适应这些差异,以便在Linux系统中顺利进行汇编语言开发。