汇编语言简介.ppt

汇编语言简介.ppt

ID:57644366

大小:174.00 KB

页数:17页

时间:2020-08-30

汇编语言简介.ppt_第1页
汇编语言简介.ppt_第2页
汇编语言简介.ppt_第3页
汇编语言简介.ppt_第4页
汇编语言简介.ppt_第5页
资源描述:

《汇编语言简介.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、汇编语言简介OSLAB主要内容汇编语言概述数据存储条件控制子程序结构数组实例汇编语言概述汇编语言优点能够直接访问与硬件相关的存储器或I/O端口;能够不受编译器的限制,对生成的二进制代码进行完全的控制;能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁;能够根据特定的应用对代码做最佳的优化,提高运行速度;能够最大限度地发挥硬件的功能。缺点编写的代码非常难懂,不好维护;很容易产生bug,难于调试;只能针对特定的体系结构和处理器进行优化;开发效率很低,时间长且单调。汇编语言概述(续)汇编指令的操作数寄存器操作数操作数在寄存器中(push

2、l%eax)存储器操作数直接寻址方式寄存器间接寻址方式立即数操作数直接放在指令中(addl$1,%eax)暗含操作数自增/自减运算中的操作数1一些基本的汇编指令movdest,srcaddopr1,opr2subopr1,opr2incoprdecopr汇编语言概述(续)AT&T汇编与Intel汇编的区别寄存器名的不同立即数形式的不同源操作数和目标操作数的位置的不同操作数的字长决定方式的不同远程转移指令和远程子调用指令的操作码的不同内存操作数寻址方式的不同AT&T格式Intel格式pushl%eaxpusheaxAT&T格式Intel格式pushl$1pu

3、sh1AT&T格式Intel格式addl$1,%eaxaddeax,1AT&T格式Intel格式movbval,%almoval,byteptrvalAT&T格式Intel格式ljump$section,$offsetjmpfarsection:offsetlcall$section,$offsetcallfarsection:offsetlret$stack_adjustretfarstack_adjustAT&T格式Intel格式movl-4(%ebp),%eaxmoveax,[ebp-4]数据存储可执行程序在内存中的结构.text代码段存放代码.da

4、ta数据段存放数据.rodata只读数据段存放只读数据,如C中的字符串和其它常量.bss未初始化数据段存放未初始化的全局或静态数据,这些内存必须初始化为0数据对齐系统存储结构有关,页对齐段起始地址要求页对齐,便于缺页处理减少Cachemiss,Cacheline对齐结构体常要求cacheline对齐,提高访问效率减少内存读写次数,字对齐普通变量要求字对齐,减少内存读写次数条件控制高级语言的条件控制while,if汇编语言的条件控制会将条件判断的结果放在FLAGS寄存器中,以便根据结果来做出相应的条件控制条件控制指令的分类比较指令转移指令循环控制指令条件控制

5、(续)比较指令cmpvleft,vright转移指令无条件转移指令jmpopr条件转移指令thezero(ZF)flag,theoverflow(OF)flagandthesign(SF)flagJZbranchesonlyifZFissetJNZbranchesonlyifZFisunsetJObranchesonlyifOFissetJNObranchesonlyifOFisunsetJSbranchesonlyifSFissetJNSbranchesonlyifSFisunsetJCbranchesonlyifCFissetJNCbrancheson

6、lyifCFisunsetJPbranchesonlyifPFissetJNPbranchesonlyifPFisunset条件控制(续)循环控制指令loop递减ecx,如果ecx不等于0,跳转到指定labelloope,loopne递减ecx,如果ecx不等于0,跳转到指定label递减ecx,如果ecx等于0,跳转到指定labelloopz,loopnz递减ecx,如果zf等于1,跳转到指定label递减ecx,如果zf不等于1,跳转到指定label子程序结构基于堆栈的子程序结构堆栈对齐IA-32中堆栈是4字节对齐,IA-64中可以是8字节对齐压入堆栈

7、的数据必须对齐,byte数据在压入堆栈之前必须扩展为四字节堆栈生长方向IA-32中堆栈向下生长,压入数据堆栈指针减少,弹出数据堆栈指针增加堆栈指针IA-32中堆栈指针指向栈顶第一个可用地址C语言函数结构活动记录函数参数、返回地址、局部变量变量上下文环境C语言两层函数结构,不是全局变量,便是局部变量全局变量在数据段,局部变量位于堆栈子程序结构(续)堆栈操作及图示在调用子程序之前需要进行堆栈的保存子程序调用之后需要对堆栈进行恢复利用push/pop/pusha/pushad/popa/popad指令对堆栈进行操作子程序结构(续)参数传递参数传递方式通过寄存器传

8、递参数如过程和调用程序在同一源文件(程序模块)中,过程可以直接访问

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。