当前位置: 首页 > news >正文

汕头市通信建设管理局网站企业咨询公司名字大全

汕头市通信建设管理局网站,企业咨询公司名字大全,广州万户网络怎么样,网站建设夜猫系列文章戳这里#x1f447; 什么是上下文无关文法、最左推导和最右推导如何判断二义文法及消除文法二义性何时需要消除左递归什么是句柄、什么是自上而下、自下而上分析什么是LL(1)、LR(0)、LR(1)文法、LR分析表LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系编译原理第三章习…系列文章戳这里 什么是上下文无关文法、最左推导和最右推导如何判断二义文法及消除文法二义性何时需要消除左递归什么是句柄、什么是自上而下、自下而上分析什么是LL(1)、LR(0)、LR(1)文法、LR分析表LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系编译原理第三章习题词法分析、构建DFA、上下文无关文法、LL(1)分析、提取正规式证明LL(1)、SLR(1)、LALR(1)文法翻译方案、属性栈代码【运行时环境】什么是活动记录、 活动记录与汇编代码的关系 编译原理【运行时环境】—什么是活动记录、 活动记录与汇编代码的关系系列文章戳这里什么是活动记录活动记录AR Activation Record活动记录的内容举个栗子再举个栗子再再举个栗子什么是活动记录 相信大家也和我一样觉得编译原理在运行环境这部分比较难理解由于机器是栈式运行的所以里面很多操作并不利于我们理解下面分享一下我自己对活动记录这一块的部分理解也有一些x86汇编的内容 活动记录AR Activation Record 是一连续存储区域用于管理与存放和程序单元执行相关的重要信息。下图就是活动记录的内容简单来说活动记录是用来记录一段函数信息的地方 很好理解当我们在写C程序时如果我们要用一个函数调用另一个函数那么在调用结束后怎么回到原来的函数呢 就是活动记录在帮忙他帮我们把调用者的地址记录下来并用控制链相连。 而访问链是记录当前函数可以访问的函数地址这个是可选择的意思就是活动记录中可以没有它。返回值自然就是该函数return的值实在参数其实就是函数的参数也就是int fun(int a,int b)里面的a和b局部数据就是函数体里面定义的局部变量机器状态就是活动记录的一个指针它是活动记录的基地址x86汇编中一般表示为%ebp我们可以用它来找到活动记录里面参数的位置比如8(%ebp)就是ebp8 问题来了如何获取活动记录里的内容呢上面说了可以通过%ebp如下图所示bp进行偏移就可以取得的对应位置的值 活动记录的内容 下图是栈式分配下的活动记录内容布局其中返回值往下即为高地址到低地址所以我们要调用参数就需要用bpxx去取而局部参数就是bp-xx还不懂也没关系后面会举个栗子应该会更好理解 临时区域。用以保存临时计算结果 局部数据区。源程序中程序单元声明的局部变量对应在此区域。 机器状态保存区。存有机器的寄存器程序指令计数器 ip返回地址等。 访问链静态链。当前程序单元可以访问的静态程序中外围程序单元的活动记录链。 控制链动态链。程序单元的活动记录按它们的生成或调用次序串成链。 实在参数 返回值 举个栗子 那么这个C程序的活动记录安排你能画出来吗试试看函数g被调用时活动记录栈的大致内容如下可以看到主函数中调用了h而h调用了g他们的old bp就是控制链分别指向调用者他们都有一个局部变量a并且此时bp在函数g的活动记录中sp是栈顶指针(始终指向栈顶) 再举个栗子 这是一个非常简单的c函数程序你能画出它的活动记录图并标明各个参数对应bp的偏移吗如果我们要取参数则上移要取局部变量则下移这里是int占4个字节所以分别是bp8和bp-4 更深一步让我们一起看一看这段程序的汇编代码是怎么样的吧x86汇编是典型的栈式机首先pushl %ebp将当前bp压栈movl %esp,%ebp将这个位置作为活动记录的基址即把esp送入ebpsubl $8, %esp为局部数据分配空间有两个整型变量所以esp-8movl 8(%ebp), %eax取参数a的值放入寄存器%eax再movl %eax,-4(%ebp)将其赋给局部变量后两句同理将b赋给d最后leave和ret回收活动记录恢复原先保存的机器状态leave相当于mov bp,sp ;pop bp //恢复调用者的bp 再再举个栗子 int punc(int** a,int b, int c,int d) { a[b][c] d;return 0; }//C/C程序int 变量占 4 字节。(1)准确画出该函数的活动记录内容安排。 同理也很简单就能画出来 (2)补全 5 处带有下划线的汇编代码。 那么这里的汇编代码怎么填呢 可以看到参数分别为(int** a,int b, int c,int d)如果你不清楚指针引用的话可以先看一下这篇文章《C语言指针、引用》那么其中a是一个引用它是指向某一个指针的指针的引用也就是有一个指针x它指向另一个指针y而a就是指针x的引用也就是x的另一个名字。知道这个以后就可以补充汇编代码了movl 8(%ebp), %eax显然是将参数a送入%eax那么前面说了a是一个指针的指针的引用也就是说此时的a是一个地址那么①就应该是movl (%eax)%ebx(%eax)相当于取指针a指向的地址可以作为一个数组的首地址然后把a这个地址先放到一个寄存器%ebx里面%12(ebp)对应的就是参数b了那接下来就应该计算a[b]的值了数组地址的计算也很简单ab*4对应汇编就是(%ebx,%eax,4)再把它送入%ebx就得到了a[b]的地址然后取d的值20(%ebp)送入%eax再存到寄存器%edx中然后再计算a[b][c]的地址前面已经计算了a[b]为(%ebx,%eax,4)所以a[b]c*4(%ebx, %eax ,4)那么最后将d送入这个地址就可以了movl %edx,(%ebx,%eax,4)最后return 0即对应 xorl %eax, %eax按位异或相同的位置为0不同的位置为1eax和eax的每一位都相同所以相当于清零。最终结果如下:
http://www.hkea.cn/news/14413142/

相关文章:

  • 网站建设推广济南兴田德润优惠吗做网站工作都包括什么
  • 做流程图表的网站营销网站建设技术
  • 京东网站建设流程网站维护怎么样
  • 如何避免网站被耍流量南阳微信网站
  • 东莞百度网站推广烟台网站优化
  • 网站建设新手指南自己如何做网站优化
  • 网站设计的需求分析wordpress ios版
  • 网站建设怎么宣传手机网页翻译
  • 最新创建的网站知名品牌形象策划公司
  • 网站打不开dns修改吗湖南网站设计
  • 淮北官方网站二维码在线生成制作
  • 北京海淀区邮编wordpress优化服务器
  • 网站的通知栏一般用什么控件做学编程软件
  • 厚街商城网站建设ppt超级市场
  • 建站开发重庆网站建设方案书
  • c#网站开发工具哈尔滨城乡建设网站
  • 网站打开速度影响因素佳能网站建设需求报告
  • 做sorry动图的网站网站建设 昆明邦凯网络
  • 常州专业网站建设公司咨询深圳建设门户网站
  • 我想学习做网站做渠道的网站有哪些
  • ip38域名信息查询网站找做网站的客户
  • dw做aspx网站如何做产品的网络推广
  • 域名估价网站wordpress 媒体
  • 怎么做二维码让别人扫码进入网站装修公司最怕三种人
  • 网站改版的方式大致为局网站建设管理整改情况
  • 鹤壁做网站公司国外免费ip地址
  • 推广网站2024如皋建设医院网站
  • 天河区门户网站教育专栏天元建设集团有限公司王士坤
  • 百度搜索什么关键词能搜到网站网站资讯创作
  • 最有效的网站推广公司杭州专业网站营销