草庐IT

汇编指令

全部标签

c++ - 指令嵌套#pragma omp 的正确用法

在应用OpenMP并行化之前,以下代码运行起来非常顺利。事实上,下面的代码处于死循环状态!我确信这是由于我对OpenMP指令的不正确使用造成的。你能告诉我正确的方法吗?非常感谢。#pragmaompparallelforfor(intnY=nYTop;nY180||dLat>180){continue;}if(Navigation.GeoToXY(dX,dY,dLon,dLat,0)>0){continue;}//SkipvoiddatascanlinedY=dY-nScanlineOffset;//Computecoefficientsaswellasitsfourneighbori

c++ - GCC 汇编代码生成错误和解决方法

GCC4.5.2(在Ubuntu11.10x64上,但编译为32位)生成无效的汇编代码,我很好奇是否可以在不更改代码的情况下修复,只需应用选项或类似的东西。请注意,优化已经是-O0。我有两个功能:inlinelongClass::Get(){longv=*(long*)(m_p);m_p+=4;returnv;}inlinevoidClass::Command(){m_p+=Get();}GCC4.5.2生成此汇编代码:9840m_p+=Get();f689eff5:mov0x8(%ebp),%eaxf689eff8:mov0xd4(%eax),%eaxf689effe:mov%eax

c++ - 在 Visual Studio 中检测 SSE/SSE2 指令集的可用性

如何在代码中检查VisualStudio编译器是否启用了SSE/SSE2?我已经尝试过#ifdef__SSE__但它没有用。 最佳答案 关于_M_IX86_FP的一些附加信息。_M_IX86_FP仅为32位代码定义。64位x86代码至少有SSE2。您可以使用_M_AMD64或_M_X64来确定代码是否为64位。#ifdef__AVX2__//AVX2#elifdefined(__AVX__)//AVX#elif(defined(_M_AMD64)||defined(_M_X64))//SSE2x64#elif_M_IX86_FP==

c++ - 将 GCC 内联汇编 CMOV 转换为 Visual Studio 汇编器

文章中Linearvs.BinarySearch,有一个使用CMOV指令的二进制搜索的快速实现。我想在VC++中实现它,因为我正在处理的应用程序依赖于二进制搜索的性能。该实现有一些GCC内联汇编器,声明如下:staticintbinary_cmov(constint*arr,intn,intkey){intmin=0,max=n;while(min>1;asm("cmpl%3,%2\n\tcmovg%4,%0\n\tcmovle%5,%1":"+r"(min),"+r"(max):"r"(key),"g"(arr[middle]),"g"(middle+1),"g"(middle));

c++ - 如何通过反汇编从 C++ 函数中获取 "lea"指令?

我正在尝试学习逆向工程,但我被这件小事困住了。我有这样的代码:.text:10003478moveax,HWHandle.text:1000347Dleaecx,[eax+1829B8h]我想知道,它在C或C++中看起来如何?尤其是箭头所指的两条指令。HWHandle是一个变量,它保存从GetModuleHandle()函数返回的值。更有趣的是,在这条指令下面的几行中,dword_1000FCA0被用作一个函数:.text:1000353Cmoveax,dword_1000FCA0.text:10003541movecx,[eax+0A0h].text:10003547pushoffs

c++ - 用于多态调用的 x86-64 汇编器

我有C++代码:intmain(){M*m;O*o=newIO();H*h=newH("A");if(__rdtsc()%5==0){m=newY(o,h);}else{m=newZ(o,h);}m->my_virtual();return1;}虚拟调用由这个asm表示:movrax,qwordptr[x]movrax,qwordptr[rax]movrcx,qwordptr[x]callqwordptr[rax]这比我预期的vtable方法调用多了一行。所有四个ASM行都特定于多态调用吗?上面四行怎么伪读?这是完整的ASM和C++(虚拟调用在最后进行):intmain(){addby

c++ - 我可以在#include 指令中使用预处理器变量吗?

这就是我想要做的:$c++-DGENERATED=build/generated-contentmain.cpp我的main.cpp文件:#include"GENERATED/header.h"voidf(){/*something*/}目前这段代码无法编译。我该如何解决?这是否可能? 最佳答案 您似乎想根据某些“编译配置文件”使用不同的header。我宁愿建议使用-I指令来指定包含目录,而不是-D解决方案。假设您有以下文件树:/debug/header.hrelease/header.hmain.cpp:#include"head

Git版本管理工具(实战进阶):零基础到起飞实战项目完整篇 →Git学习一篇就够 & 从基本指令、到本地仓库、远程仓库、实战项目开发演练介绍超详细!

heima李师傅最新版Git的讲解文章目录Git在实战项目开发使用功能学习01.Git初识02.Git仓库03.Git的三个区域04.Git文件状态05.Git暂存区作用06.练习-登录页面07.Git-切换版本08.删除文件09.忽略文件10.分支的概念11.练习-登录bug修复12.分支-合并与删除13.分支-合并与提交14.分支-合并冲突15.Git常用命令16.Git远程仓库17.Git远程仓库-克隆18.多人协同开发19.VSCode中使用Git20.案例-发布项目-数据管理平台21.Git常用命令总结Git在实战项目开发使用功能学习01.Git初识概念:一个免费开源,分布式的代码版

c++ - 内联汇编会影响可移植性吗?

假设您编写了可在不同平台上流畅运行的可移植C++代码。要进行一些修改以优化性能,您可以在代码中使用内联汇编。这是一个好的做法(搁置编译器优化)还是会给可移植性带来麻烦? 最佳答案 显然它破坏了可移植性——代码只能在汇编语言所针对的特定体系结构上工作。此外,这通常是浪费时间-编译器的优化器几乎肯定比您更擅长编写汇编代码。 关于c++-内联汇编会影响可移植性吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

c++ - SPARC : How to handle integer doubleword pairs? 的 GCC 内联汇编

据我了解,在SPARC中,32位整数存储在单个寄存器中,64位整数存储在相邻的寄存器对中,偶数寄存器包含高32位,奇数寄存器包含低位32位。我需要编写一些专门的SPARC内联汇编宏(内联汇编函数也可以)来处理64位整数双字对,但我不知道如何进行通用引用(使用GCC扩展内联汇编)到我的内联汇编中这对的两半。虽然我的汇编宏比下面显示的MULTIPLY()宏稍微复杂一点,但乘法示例(如果有效)将演示如何处理64位双字对的两半。谁能告诉我如何修复我的MULTIPLY()宏?以防万一,我在...bash-2.03$uname-aSunOS[...]5.8Generic_117350-39sun4