草庐IT

Assembly

全部标签

c++ - gcc 的 asm volatile 是否等同于递归的 gfortran 默认设置?

我只是在研究C++和Fortran中的递归函数,我意识到Fortran中的一个简单递归函数几乎是与其等效的C++函数一样快。现在,在进入这个之前,我知道这里有类似的问题,特别是:Whydoesaddingassemblycommentscausesuchradicalchangeingeneratedcode?Workingofasmvolatile(“”:::“memory”)Equivalenttoasmvolatileingfortran但是,我有一点更具体和困惑,因为Fortran编译器似乎正在做你可以用gcc中的asmvolatile实现的事情。为了给您一些上下文,让我们考虑

c++ - 混合 C 和汇编文件

我想使用nakedfunction在我的C++程序中使用g++。不幸的是,与VC++不同,g++不支持裸函数,管理它的唯一方法是在单独的文件中编写您自己的汇编代码并链接到您的C++文件。我试图找到一些很好的x86教程来混合汇编和C/C++文件,但找不到任何好的教程。如果你知道的话,请告诉我。请注意,我不是在询问内联汇编,而是链接C和汇编文件以及在汇编中声明C的外部变量的方法,反之亦然,除了在C或汇编中使用它们之外,还有使用Makefile链接C和asm文件的方法. 最佳答案 在C++文件中:extern"C"voidfoo();//

c++ - 为什么 ICC 以这种方式展开这个循环并使用 lea 进行算术运算?

查看ICC17生成的用于迭代std::unordered_map的代码(使用https://godbolt.org)让我很困惑。我将示例提炼为:longcount(void**x){longi=0;while(*x){++i;x=(void**)*x;}returni;}使用ICC17编译它,使用-O3标志,导致以下反汇编:count(void**):xoreax,eax#6.10movrcx,QWORDPTR[rdi]#7.11testrcx,rcx#7.11je..B1.6#Prob1%#7.11movrdx,rax#7.3..B1.3:#Preds..B1.4..B1.2incr

c++ - ARM 中是否有与 rdtsc 等效的指令?

对于我的项目我必须使用内联汇编指令例如rdtsc来计算一些C/C++指令的执行时间。以下代码似乎适用于Intel但不适用于ARM处理器:{unsigneda,d;asmvolatile("rdtsc":"=a"(a),"=d"(d));t0=((unsignedlong)a)|(((unsignedlong)d)我的问题是:如何编写与上述类似的内联汇编代码(计算指令的执行耗时)以在ARM处理器上运行? 最佳答案 您应该读取协处理器p15的PMCCNTR寄存器(不是真正的协处理器,只是CPU函数的入口点)以获得周期计数.请注意,只有在

c++ - 为什么我的反汇编 C++ 代码使用指令指针和偏移量来获取字符串文字?

我有一个我反汇编的C++程序,程序集似乎使用指令指针来获取字符串文字。例如:leaq0x15468(%rip),%rsi##literalpoolfor:"special"和leaq0x15457(%rip),%rsi##literalpoolfor:"ordinary"为什么编译器使用指令指针来获取字符串文字?这似乎会给任何人类程序员带来极大的麻烦,尽管对于编译器来说可能并不那么困难。不过,我的问题是为什么?是否有一些基于机器或历史的原因,或者编译器编写者只是决定任意使用%rip? 最佳答案 请记住,C++中的字符串文字是常量且不

c++ - 如何将 32 位编译二进制文件转换为 64 位

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion背景:我们已经获得了在VisualStudio中构建32位Windows应用程序的软件产品。我们希望将此应用程序移植到64位。此代码的一个关键任务组件是一个最初由第三方使用gFortran构建的黑盒静态库(.a文件)。最初的开发人员已经去世,我们能够获得的Fortran源代码是不完整的,而不是构建该库的版本(并且包含已编译库中不存在的严重错误)。他们没有使用VCS。问题:我想创建一个64位静态库,其代码在

c++ - GCC C++ 异常处理实现

我想知道GCC是如何为C++程序实现异常处理的。我无法在Web上找到一篇易于理解和不言自明的文章(尽管有很多针对VisualC++的此类文章)。我只知道GCC的实现称为DWARF异常处理。我写了一个小的C++程序并用命令将它翻译成汇编:g++main.cpp-S-masm=intel-fno-dwarf2-cfi-asm这里给出了main.cpp和main.s文件。谁能逐行解释main.s文件的内容,尤其是.gcc_except_table和.eh_frame部分?(我的操作系统是Ubuntu13.0432位。)谢谢!ma​​in.cpp:voidf(){throw1;}intmain

c++ - 奇怪的编译代码

我已经用谷歌的nacl编译器编译了一些Qt代码,但是ncval验证器没有理解它。众多例子之一:src/corelib/animation/qabstractanimation.cpp:165相关代码如下:#defineQ_GLOBAL_STATIC(TYPE,NAME)\staticTYPE*NAME()\{\staticTYPEthisVariable;\staticQGlobalStaticthisGlobalStatic(&thisVariable);\returnthisGlobalStatic.pointer;\}#ifndefQT_NO_THREADQ_GLOBAL_STA

云原生周刊 | 2023 年热门:云 IDE、Web Assembly 和 SBOM | 2023-02-20

在CloudNativeSecurityCon上,云原生计算基金会的首席技术官ChrisAniszczyk在TheNewStackMakers播客的这一集中强调了2023年正在形成几个趋势:随着GitHub的Codespaces平台通过集成到GitHub服务中获得认可,云IDE(或集成开发环境)将变得成熟。软件物料清单(SBOM)将继续成熟。GitOps和OpenTelemetry:今年,KubeCon提交的关于GitOps的话题非常多。OpenTelemetry是CNCF中第二受欢迎的项目,仅次于Kubernetes。平台工程很火。Aniszczyk将CNCF项目Backstage列为他正在

c++ - C 中的函数序言和结语

我知道嵌套函数调用中的数据进入堆栈。堆栈本身实现了一个逐步方法,用于在函数被调用或返回时从堆栈中存储和检索数据。这些方法的名称最为人所知作为序言和结语。我尝试搜索有关该主题的资料,但没有成功。你们知道关于函数序言和结尾在C中通常如何工作的任何资源(站点、视频、文章)吗?或者如果能解释一下就更好了。P.S:我只是想要一些一般的View,而不是太详细。 最佳答案 有很多资源可以解释这一点:Functionprologue(维基百科)x86Disassembly/CallingConventions(维基百科)Considerations