AT&T与INTEL汇编语法对比及GCC内嵌汇编详解
需积分: 14 79 浏览量
更新于2024-07-25
收藏 156KB PDF 举报
"本文档主要对比了AT&T和INTEL两种汇编语言的语法差异,并介绍了GCC内嵌汇编的使用方法。适合已具备INTEL汇编基础的读者学习。"
在汇编语言的世界里,AT&T和INTEL是两种常见的语法风格,它们在编写和理解上存在显著的不同。本文档首先探讨了这两种语法的主要区别:
1. 大小写:INTEL汇编使用全大写字母,而AT&T汇编则采用小写字母。
1.1 示例:在INTEL格式中,"MOV AX, BX"表示将BX的内容移动到AX中,而在AT&T格式中,这一操作变为"movl %ebx, %eax",源操作数(%ebx)在前,目的操作数(%eax)在后。
1.2 操作数赋值方向:INTEL语法从右到左,AT&T语法从左到右。
1.3 前缀:INTEL语法中,寄存器和立即数不需要前缀,但在AT&T中,寄存器需加上"%", 立即数需加上"$"。例如,"MOV AX, 1"在INTEL中,对应AT&T的写法是"movl $1, %eax"。
1.4 间接寻址语法:AT&T汇编中,使用"("和")"来表示间接寻址,如"movl (%ebx), %eax"表示从EBX指向的内存地址中加载数据到EAX。
1.5 后缀:AT&T汇编会根据操作数类型添加后缀,如"l"表示32位操作。
1.6 指令:两种语法的指令格式和用法有所不同,例如,INTEL的"CALL FAR SECTION:OFFSET"在AT&T中写作"lcall $section:$offset"。
接下来,文档转向GCC内嵌汇编的介绍:
2. GCC内嵌汇编:
2.1 简介:GCC内嵌汇编允许开发者在C或C++代码中直接插入汇编指令,以实现特定的硬件交互。
2.2 内嵌汇编举例:文档提供了一些内嵌汇编的实例,展示如何在C/C++代码中使用汇编语句。
2.3 语法:详细讲解了内嵌汇编的模板、输出部分、输入部分、限制字符和破坏描述部分。
2.3.1 汇编语句模板:包括"asm"关键字,以及在其中定义的指令和操作数。
2.3.2 输出部分:定义了哪些寄存器或内存位置会被汇编代码修改。
2.3.3 输入部分:指定哪些寄存器或内存位置的初始值被汇编代码使用。
2.3.4 限制字符:用于约束汇编代码对某些寄存器或内存区域的使用。
2.3.5 破坏描述部分:列出可能被汇编代码改变的寄存器或内存。
2.4 GCC如何编译内嵌汇编代码:这部分解释了GCC编译器如何处理这些内嵌的汇编指令,确保它们正确地与高级语言代码集成。
最后,文档给出了后记,总结了主要内容,并提醒读者需要有一定的INTEL汇编基础才能更好地理解这些差异和概念。
通过本文档,读者可以深入了解AT&T和INTEL汇编语言的异同,以及如何在GCC环境中有效地使用内嵌汇编,这对于系统级编程和底层优化尤其重要。
179 浏览量
364 浏览量
247 浏览量
2022-09-14 上传
2019-05-13 上传
2009-06-25 上传
208 浏览量
fjp790308446
- 粉丝: 1
- 资源: 19
最新资源
- 行业文档-设计装置-集中处理站油田采出液分离装置及油水分离方法.zip
- 01_Homework-Accessibility-Code-Refactor:为了提高Horiseon网站的搜索排名并使更多的用户可以访问它,对现有代码进行了重构
- 小程序预览PDF文件插件Pdf.js
- xue-git:学习git
- eng-hiring:18F工程部候选人选择指南,从简历屏幕到应聘者
- 将base64编码和解码为字节或utf8-Rust开发
- Vector_MATLAB_Simulink_MC_Add_on_15010
- muun::bird:Live Twitter仪表板
- mongoose-flights
- 动态演示nio中的buffer相关操作.zip
- 海吉亚医疗-6078.HK-公司深度研究:复制的确定性缘何而来.rar
- http-请托管这些东西-基本的http服务器,用于快速,简单地托管文件夹-Rust开发
- css3按钮特效制作鼠标悬停按钮动画特效
- Sor:机械鸟游戏
- 非常好的一款多小区物业管理系统
- Stat466:鲍恩施纳普森的统计数据-开源