AT&T汇编指令详解:Linux ARM嵌入式中的寻址与数据传送
需积分: 13 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汇编指令和寻址模式是至关重要的,它们允许程序员直接控制硬件,实现高效且低级别的代码优化。在进行嵌入式系统开发、驱动程序编写或对性能有严格要求的应用时,汇编语言常常被用来编写关键部分的代码。
2010-07-23 上传
2021-09-29 上传
119 浏览量
2017-11-29 上传
2013-01-18 上传
2010-11-02 上传
2018-07-25 上传
wzhm2002
- 粉丝: 0
- 资源: 6
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍