主页

当前位置:主页 > 凯发官方网 > 如何ag凯发阅读汇编语言

如何ag凯发阅读汇编语言

作者: 来源:未知

导读:


    如何ag凯发阅读汇编语言本篇先容x86六十四框架,若何瘦脸浏览汇编发言,另一篇看待arm64框架的作品曾经革新,请检察原文浏览。你或许以为这都是2在21百年,有人需求进修组装机电脑配置列表2021吗?抱歉,如何ag凯发阅读汇编语言

正文:

    本篇先容 x86六十四 框架,若何瘦脸浏览汇编发言,另一篇看待arm64框架的作品曾经革新,请检察原文浏览。 你或许以为这都是2 在21百年,有人需求进修组装机电脑配置列表2021吗?抱歉,谜底是笃信的。最初,议决浏览汇编代码,咱们恐怕确切地剖析顺序在做什么。为什么你的C++顺序是1MB(譬喻)而不为100kb?能否恐怕完善最常 移用的函数以实现某些功能创新? 特别是看待C++来说,强大无显式编纂的指示掌握很容易遗忘,或者咱们底子无属意到这些隐式掌握,好比源代码或编程发言语义中隐式的指示掌握。 第二,更现实的来由是:遵循twitter上的级高投票,咱们紧接着要商量的话题是参数传递。只为弄清参数传递的缺陷,咱们需求对汇编发言有一只基础的剖析。在本篇中,咱们将进修若何瘦脸读取而不为编纂汇编代码。 固然本篇的少少代码或实质恐怕链接到编译器资源管理器,但在网站上公布作品时不需求剖析汇编发言。 汇编发言的基础单元是指示。每一条机器指示都是一只很小的掌握,好比加底下数量,从内存中加载少少数据,跳到另一只地点继续奉行责任保险若何收取(好比C/C++中的goto语句优美的美丽经典),移用函数,从函 数中复返稍后(x86体系结构中也有良多繁琐的指示,内心坦然了自作战史籍赶过40年,内心坦然了是新的)ag凯发 让咱们议决第一只案例来谙习少少简易的证据。此代码筹划二维彩超查抄什么向量模板的通俗。 底下的代码是遵循X86_64体系结构的clang11编译器天生的汇编代码(行使编ag凯发译器资源管理器) 一 此在线器械天生。 第一条指示imulqag凯发%RDI,它奉行有象征数的乘法揣度律及简洁揣度(四年级下)。后缀Q显露在64位寄存器上奉行掌握(后缀L、W和B辩别显露32位、16位和8位)。此指示将底下寄存器中的值相乘(RDI; 寄存器名以%开始)。收关存储在第二个寄存器中。此指示相对于C++代码中V.X的通俗。 第二条杠将要看不见指示的效用与第一条指示好想,仅仅寄存器%RSI用于筹划v.y的通俗。 这边咱们有一只起义的指示:leaq(%RSI,%RDI),%rax。Lea替代“加载灵验地方”。从第一只掌握数筹划出地方后,咱们将地方赋给第二个掌握数所显露的地点。(%RSI,%RDI)显露指向%RS I+%RDI的内存地方,因而此指示预示着将%RSI和%RDI中的值相加的公理,并将收关赋给%rax。Lea是一只飞速的指示。在很多risc-y指示聚合,如arm64,很多add指示被用作实现也许掌握 二 . 终末,从normsquared函数复返retq指示。 这边简易先容一次register是什么。寄存器是汇编发言的“变量”。与您最可爱的发言差异(如果您最可爱的发言不为汇编发言),汇编发言中的“变量”是局限的,它们都有法式称呼。咱们将商量的寄存器好多有64 位。稍后,咱们将发现少少寄存器有少少分外的用场。我或许不记起她们扫数的名册,但遵循维基百科,在X86上,扫数的都是64体系结构 三 16个寄存器是rax、RCX、RDX、RBX、RSP、RBP、RSI、RDI、R8、R9、R10、R11、R12、R13、R14和R15 让咱们充斥一次上头的案例。咱们将以normsquared输出vec2。 保护是天生的汇编代码: 原因移用函数vec2::debugprint()const外,代码还行使了少少新的指示和寄存器。%RSP是一只称作客栈指针的分外寄存器,用于打算函数移用客栈。客栈指针%RSP生存客栈顶端成分的地方。在 x86体系结构中,%RSP向下拉长(向低地方拉长)。指示subq$24%RSP在客栈上为三个64位整数成立环境(在函数开始建立客栈和寄存器的指示称作函数绪论女装旗舰店官网)。紧接着的两条mov指示将 参数v.x传递给normqueued,v.Y生存在客栈上(相关参数传递的更多新闻,请参阅下一篇作品),促使恐怕在%RSP+8处粘贴向量v。紧接着,咱们行使指示leaq 8(%RSP),%RDI将粘贴 的V地方纳入%RDI,而后移用VEC::debugprint()const函数。 让咱们举一只稍许差异的案例。假设咱们想要将输出字符串大写,而且咱们想要防止allocati

上一篇:没有了

下一篇:没有了