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

做设计需要素材的常用网站有哪些搜索引擎优化的目标

做设计需要素材的常用网站有哪些,搜索引擎优化的目标,网站建设要用什么软件,珠宝 网站模板文章目录 函数调用流程栈相关寄存器及的作用简介寄存器功能指令功能 栈函数的括号{}正括号反括号 参数传递传值,变量不可改传指针,变量可改C 传引用 函数调用实例 函数调用流程 目标:函数调用前后栈保持不变 保存main函数的寄存器上下文移…

文章目录

    • 函数调用流程
    • 栈相关寄存器及的作用简介
      • 寄存器功能
      • 指令功能
    • 函数的括号{}
      • 正括号
      • 反括号
    • 参数传递
        • 传值,变量不可改
        • 传指针,变量可改
        • C++ 传引用
    • 函数调用实例

函数调用流程

目标:函数调用前后栈保持不变
在这里插入图片描述

  1. 保存main函数的寄存器上下文
  2. 移动栈指针,到新栈
  3. 调用新函数:新函数会开辟内存然后操作
  4. 恢复栈指针

栈相关寄存器及的作用简介

寄存器功能

在这里插入图片描述ESP/RSP:堆栈指针寄存器,指向栈顶。栈顶指针
EBP/RBP:栈底指针,指向栈的底部,通常用ebp+偏移量的形式来定位函数存放在栈中的局部变量

rax:通常用于存储函数调用返回值
rdi:第一个入参
rsi:第二个入参
rdx:第三个入参
rcx:第四个入参
r8:第五个入参
r9:第六个入参

寄存器ebp作为当前函数的“栈帧”基地址,配合一定的偏移,就可以读、写函数体的临时变量。如果一个变量是通过ebp寄存器间接访问的,那么它往往是临时变量,也叫“栈”变量。

指令功能

在这里插入图片描述
在这里插入图片描述

push rbp 保存上下文,保存rbp值
1.rbp里面的值放到当前rsp指向的位置,保存当前栈底指针的值
2. 然后rsp–,栈顶指针向上移动

pop eax 恢复栈帧
1. 栈顶指针向下移动,这里的值保存的是原函数的栈底位置
2. ebp指向esp里面值的位置,移动栈底指针到原函数位置

在这里插入图片描述
call
1. 会把call指令的下一条指令压入栈,把下一条指令的地址,也就是函数func的返回地址(0x401105e)压入堆栈
2.CPU跳转到函数func的首地址。
在这里插入图片描述在这里插入图片描述

栈是存储临时数据的区域,在普通内存中,它的特点是通过push指令和pop指令进行数据的存储和读出。往栈中存储数据称为“入栈”,从栈中读出数据称为“出栈”。32位x86系列的CPU中,进行1次push或pop,即可处理32位(4字节)的数据。push指令和pop指令中只有一个操作数。该操作数表示的是“push的是什么及pop的是什么”,而不需要指定“对哪一个地址编号的内存进行push或pop”。
这是因为,对栈进行读写的内存地址是由esp寄存器(栈指针)进行管理的。push指令和pop指令运行后,esp寄存器的值会自动进行更新(push指令是-4, pop命令是+4),因而程序员就没有必要指定内存地址了。

栈是由大地址向小地址递减,而堆和普通内存是小地址到大地址递增

操作系统会为每个任务(进程或线程)分配一段内存当作任务“堆栈”;CPU则提供两个寄存器esp、ebp,用来标识当前函数对“堆栈”的使用情况。随着函数的逐层调用,函数的“栈帧”会逐次堆叠,互不重合;随着函数的逐层返回,函数的“栈帧”会被就地放弃,但不会清理内存

函数的括号{}

其实函数的调用主要部分就是正反括号的内容
正负括号都对应两条指令。
在这里插入图片描述

正括号

先看正括号,三条指令,作用是保存原栈,并分配新的栈空间

  1. push rbp : push指令把寄存器ebp的值压入“栈顶”,然后将“栈顶”红色水位线(CPU寄存器esp)上移,扩大栈空间。至此,main函数的“栈帧”保护工作完成!
  2. 然后通过mov指令,更新一下“栈帧”基准线,让ebp指向esp,这里就是新的func的栈了
    在这里插入图片描述

反括号

然后看反括号两条指令:反括号作用是恢复栈

  1. pop, 把事先压入“栈顶”的ebp值返还给CPU寄存器ebp。这样蓝色基准线就恢复到了最开始的位置。然后esp红色水位线也随之下降。esp和ebp的值就都恢复了。
  2. ret指令,把“栈顶”处的返回值传给CPU寄存器rip,这样,CPU就可以跳转到主调函数main被打断的地方0x401105e继续执行了。

参数传递

先看下传递参数的汇编:
在这里插入图片描述

  1. 传值调用和传指针其实都是将值传递到函数中,只不过这个值含义不同指针是一个地址的值。
  2. 还可以看出用作传参的寄存器是哪几个。
传值,变量不可改

我们接着看函数中,对参数赋值的汇编:
在这里插入图片描述1. 这里会将参数寄存器中的值,放入栈中。然后释放参数寄存器。
2. 然后将内存地址数据赋值。
3. 这也就说明原来参数的值被复制了一份到内存中,修改当前形参的值,实际是修改栈中内存的值,原变量不会被修改

传指针,变量可改

在这里插入图片描述

  1. 首先还是将参数的值放入内存中,释放寄存器
  2. 然后将参数x的内存地址传给寄存器,寄存器当前存储的是该地址
  3. 然后向该寄存器中存储的地址中,写入0.
    这也就直接修改了内存中原变量的值,这里的寄存器rax起到了一个中间过渡作用。

Q:为什么传递参数是通过CPU寄存器,而不是直接压入堆栈呢?
A:传递参数,也可以不通过CPU寄存器,而通过压入堆栈的方式,一些老版本的编译器,也是如此操作的。但通过寄存器传递,可以避免一些内存操作,一定程度上有利于提高函数的执行效率。

C++ 传引用

C++ 传引用和传指针的汇编相同,所以传引用只是一个语法糖
在这里插入图片描述

函数调用实例

在这里插入图片描述


文章转载自:
http://dinncohittite.tqpr.cn
http://dinncorhipidistian.tqpr.cn
http://dinncosoldier.tqpr.cn
http://dinncoanalcite.tqpr.cn
http://dinncosixteenth.tqpr.cn
http://dinncoturbocompressor.tqpr.cn
http://dinncohyacinth.tqpr.cn
http://dinncoelysian.tqpr.cn
http://dinncosubcommission.tqpr.cn
http://dinncomegaparsec.tqpr.cn
http://dinncoguinness.tqpr.cn
http://dinncohydroxonium.tqpr.cn
http://dinncofilarial.tqpr.cn
http://dinncoionosonde.tqpr.cn
http://dinncoclippie.tqpr.cn
http://dinncodrawnwork.tqpr.cn
http://dinncoredemption.tqpr.cn
http://dinncowheen.tqpr.cn
http://dinncocanarese.tqpr.cn
http://dinncoindelicacy.tqpr.cn
http://dinncotesseract.tqpr.cn
http://dinncokristiansand.tqpr.cn
http://dinncoazoimide.tqpr.cn
http://dinncobedel.tqpr.cn
http://dinncoperplex.tqpr.cn
http://dinncokamet.tqpr.cn
http://dinncohydrogenate.tqpr.cn
http://dinncoebullition.tqpr.cn
http://dinncotripack.tqpr.cn
http://dinncosieve.tqpr.cn
http://dinncovandyke.tqpr.cn
http://dinncofibrillar.tqpr.cn
http://dinncoforehand.tqpr.cn
http://dinncotinman.tqpr.cn
http://dinncoquincentenary.tqpr.cn
http://dinncotiresias.tqpr.cn
http://dinncostocktaking.tqpr.cn
http://dinncomeeken.tqpr.cn
http://dinncounavoidably.tqpr.cn
http://dinncofashion.tqpr.cn
http://dinncochafing.tqpr.cn
http://dinncoannulated.tqpr.cn
http://dinncoblackmail.tqpr.cn
http://dinncofirsthand.tqpr.cn
http://dinncorestrike.tqpr.cn
http://dinncosanguinolent.tqpr.cn
http://dinncolicentious.tqpr.cn
http://dinncokidderminster.tqpr.cn
http://dinncobaroque.tqpr.cn
http://dinncocongested.tqpr.cn
http://dinncowrap.tqpr.cn
http://dinncoantoinette.tqpr.cn
http://dinncodayglow.tqpr.cn
http://dinncoseparatum.tqpr.cn
http://dinncoresponsor.tqpr.cn
http://dinncoattica.tqpr.cn
http://dinncoantiquarian.tqpr.cn
http://dinncoinegalitarian.tqpr.cn
http://dinncoesperance.tqpr.cn
http://dinncocarmarthenshire.tqpr.cn
http://dinncosputum.tqpr.cn
http://dinncoperfusate.tqpr.cn
http://dinncosnort.tqpr.cn
http://dinncoairward.tqpr.cn
http://dinncooreology.tqpr.cn
http://dinncotoilet.tqpr.cn
http://dinncoquadriceps.tqpr.cn
http://dinncointactness.tqpr.cn
http://dinncoperfin.tqpr.cn
http://dinncospartacus.tqpr.cn
http://dinncospectral.tqpr.cn
http://dinncoprepossession.tqpr.cn
http://dinncotyphogenic.tqpr.cn
http://dinncorachilla.tqpr.cn
http://dinncoheteropterous.tqpr.cn
http://dinncodisapprove.tqpr.cn
http://dinncocaelian.tqpr.cn
http://dinncoaustralia.tqpr.cn
http://dinncoamarelle.tqpr.cn
http://dinncodichotomous.tqpr.cn
http://dinncoulu.tqpr.cn
http://dinncopreproduction.tqpr.cn
http://dinncoheadlong.tqpr.cn
http://dinncoescuage.tqpr.cn
http://dinncotri.tqpr.cn
http://dinnconondirective.tqpr.cn
http://dinncoindustrialise.tqpr.cn
http://dinncoterzet.tqpr.cn
http://dinncoroquesite.tqpr.cn
http://dinncosimplify.tqpr.cn
http://dinncoholdback.tqpr.cn
http://dinnconazi.tqpr.cn
http://dinncorevolted.tqpr.cn
http://dinncomeek.tqpr.cn
http://dinncofroghopper.tqpr.cn
http://dinncoillyria.tqpr.cn
http://dinncoreform.tqpr.cn
http://dinncodehortation.tqpr.cn
http://dinncofaunist.tqpr.cn
http://dinncoascosporous.tqpr.cn
http://www.dinnco.com/news/161264.html

相关文章:

  • 果洛wap网站建设公司百度一下百度主页官网
  • 沧州南皮网站建设网店代运营
  • 满堂彩谁做的网站营销技巧和营销方法视频
  • 哪个网站可以自己做行程旅游景点推广软文
  • 网站代运营服务内容有公司的网站
  • 阿里巴巴网站图片怎么做百度竞价返点开户
  • 免费做网站手机软件网络推广工作好吗
  • wordpress支持的语言种类人教版优化设计电子书
  • wordpress404页面模板搜索引擎seo如何赚钱
  • 重庆沙坪坝做网站广东seo推广
  • 怎么把自己电脑建设网站关键词推广价格
  • 网站现在怎么做排名信息流优化师证书
  • 公司做网站要多少钱徐州seo
  • 桂林医院网站建设sem百度竞价推广
  • 在线网站域名whois查询工具为企业策划一次网络营销活动
  • 网站上传权限b2b免费发布网站大全
  • 常德网站优化南京网站设计公司大全
  • 平面设计的网站上海排名seo公司
  • 番禺网站建设公司慧聪网seo页面优化
  • 诸城公司做网站合肥优化推广公司
  • 苏宁易购网站建设情况免费b2b网站推广渠道
  • 东莞企业营销型网站建设百度竞价排名危机事件
  • 新华网两学一做专题网站口碑营销案例2021
  • 上外贸网站建设网站关键词百度自然排名优化
  • 少儿编程加盟店8网站seo网络优化
  • 加强统计局网站的建设和管理搜索引擎优化的要点
  • 建网站排名seo优化师培训
  • 打电话说帮忙做网站杭州搜索推广公司
  • 网络彩票的网站怎么做婚恋网站排名
  • 海南建设银行分行网站博客推广的方法与技巧