AT&T x86汇编语法参考手册:Linux DJGPP中的不同之处

4星 · 超过85%的资源 需积分: 14 54 下载量 124 浏览量 更新于2024-09-26 收藏 140KB PDF 举报
《AT&T x86 asm 语法指南》是一本针对Linux环境下使用的AT&T汇编语言的详细教程,特别适合那些从Windows平台转到Linux环境,或者对Intel汇编语法不熟悉的开发者。AT&T格式与Intel汇编格式存在显著差异,本书旨在帮助读者理解和适应这种不同。 首先,AT&T格式的主要特点在于源操作数和目的操作数的位置被颠倒,即目的操作数在源操作数之后。这意味着在AT&T汇编中,常见的`mov ax, bx`在AT&T语法中会写成`movw %bx, %ax`。此外,寄存器操作数需要用`%`作为前缀,如`%eax`;立即数操作数则需用`$`符号,如`$1`。 存储器操作数的长度根据操作码的最后一个字符确定:`b`表示8位,`w`表示16位,`l`表示32位。例如,`movb X, %ah`是将字节指针X的内容移动到AH寄存器中,`movl X, %eax`则是将整数X的值移动到EAX寄存器。 尽管大部分基本操作指令在AT&T和Intel格式中类似,但有几种特殊指令存在差异,如`movs`(无符号扩展)和`movz`(有符号扩展)在AT&T语法中分别对应`s`和`z`作为后缀,如`movswl %ax, %ecx`。另外,一些控制转移指令也有特定的前缀,如`lcall`、`ljmp`、`lret`等,这些指令在AT&T格式中需要明确指定目标地址。 在AT&T格式中,指令的前缀(如`rep`或`stosd`)不能与它们所作用的操作符在同一行,以保持代码清晰。这与Intel格式中的可折叠前缀有所不同,如Intel的`rep stosd`会被解释为一个复合指令。 学习和掌握AT&T x86汇编语法对于在Linux平台上进行低级系统编程至关重要,特别是对于那些希望深入了解计算机底层工作的程序员。通过阅读和实践这份指南,读者可以逐步适应Linux下的汇编语言环境,并提高编写高效、精确的汇编程序的能力。