AT&T汇编指令详解:Linux ARM嵌入式中的寻址与数据传送

需积分: 13 3 下载量 27 浏览量 更新于2024-09-15 收藏 212KB PDF 举报
"AT&T汇编指令是用于Linux ARM嵌入式系统的一种汇编语言格式,主要特点是使用后缀来表示操作数的大小。在编写汇编代码时,这些后缀对于理解和编写正确指令至关重要。例如,`b`代表1字节的`char`,`w`代表2字节的`short`,`l`既可以表示4字节的`int`或`long`,也可以表示8字节的双精度`float`,但在实际应用中不会引起混淆,因为浮点数使用不同的指令和寄存器。GAS(GNU Assembler)是实现这些指令的工具。" 在AT&T汇编指令格式中,有多种寻址方式: 1. **立即数寻址**:以`$Imm`形式表示,如`$1=1`,其中`Imm`是立即数。 2. **寄存器寻址**:用`%`前缀标识,如`%eax=eax`,`%eax`表示`eax`寄存器。 3. **绝对寻址**:`M[Imm]`表示存储器中地址`Imm`处的值。 4. **间接寻址**:`(Ea)`表示通过`Ea`计算得到的地址,如`( %eax )=*eax`。 5. **基址+偏移量寻址**:`Imm(Ea)`,如`4(%eax)`表示`eax`寄存器值加上4的地址。 6. **变址寻址**:`(Ea,Eb)`,如`(%eax,%ebx)`表示`eax`和`ebx`寄存器值相加的结果作为地址。 7. **伸缩化变址寻址**:`Imm(,Ea,s)`或`(Ea,Eb,s)`,如`0xfc(,%eax,4)`,表示基于`eax`的地址,乘以`s`(通常为2的幂)再加上`Imm`的值。 数据传送指令在汇编中扮演着核心角色,例如: - `movl S, D`:将双字(32位)数据从`S`传输到`D`,`D`可以是寄存器或存储器地址。 - `movw S, D`:传送字(16位)数据。 - `movb S, D`:传送字节(8位)数据。 - `movsbl S, D`:将带符号的字节`S`转换并扩展为双字`D`,保留符号位。 - `movzbl S, D`:将无符号的字节`S`零扩展为双字`D`。 此外,`pushl S`指令用于将`S`的值压入堆栈,堆栈指针`%esp`会减去4并更新,然后将`S`的值存储在新地址。 在编写ARM架构下的Linux嵌入式程序时,理解这些基本的AT&T汇编指令和寻址模式是至关重要的,它们允许程序员直接控制硬件,实现高效且低级别的代码优化。在进行嵌入式系统开发、驱动程序编写或对性能有严格要求的应用时,汇编语言常常被用来编写关键部分的代码。