草庐IT

ASM_FUNC

全部标签

c++ - C/C++ 将 int 转换为 short 和内联 asm(特定于 ARM)

这不是一个微不足道的问题。注意:我不需要意见或建议来使用纯asm。我实际上需要完成我正在谈论的事情:在将结果分配给shortint时获得没有此符号/零扩展optcode的内联asm。我正在处理一个将16位短裤用于许多功能的库,我正在优化它。我需要使用内联asm添加一些优化函数。问题是在很多地方函数的结果被分配给一个短整型。即,编译器生成uxth或sxtharm操作码。我的目标是避免这个问题并确保不会生成这个无用的操作码。首先,我需要定义我的优化函数来返回shortint。这样,如果它被分配给一个int或一个shortint,就没有额外的操作码来转换结果。问题是我不知道如何跳过编译器在我

c++ - 为什么 Qt 使用 d_func() 来实例化一个指向私有(private)数据的指针?

考虑以下Qt类:#includeclassMyClassPrivate;classMyClass{public:MyClass();~MyClass();private:QScopedPointerd_ptr;Q_DECLARE_PRIVATE(MyClass)}这个类类似于大多数实现私有(private)实现的Qt类的结构。宏Q_DECLARE_PRIVATE将导致以下扩展(从Qt5开始):inlineMyClassPrivate*d_func(){returnreinterpret_cast(qGetPtrHelper(d_ptr));}inlineconstMyClassPriv

c++ - 在两个 ASM GCC 内联 block 之间传播进位

尊敬的程序集/C++开发人员,Thequestionis:Doespropagatethecarry(oranyflag)betweentwoASMblockisrealisticortotallyinsane,evenifitworks?几年前,我为低于512位(编译时)的大型算术开发了一个整数库。我此时没有使用GMP,因为对于这种规模,由于内存分配和二进制表示的模型选择,GMP变慢了bench.我必须承认我使用BOOST_PP创建了我的ASM(字符串block),它不是很出色(如果好奇请看一下vli)。图书馆运作良好。但是我注意到此时不可能在两个ASM内联block之间传播状态寄存

javascript - 当 asm.js 比普通 JS 代码更快时,我为什么要在 JS 中编写新代码?

Emscripten可以从C/C++生成比手工编写的JS代码更快的代码,那么这是否意味着我们应该用C/C++编写新代码并编译它们以在Web上运行?我读了Emscripten常见问题解答,它说“一定要编写新的JavaScript代码。”,这是为什么呢? 最佳答案 asm.js并不是执行Javascript类代码的更快方法。这是一种运行代码的更快方法,该代码已经被简化为机器代码的抽象级别。您似乎大大高估了yield:如果您让JS开发人员将C++当作JS来编写,您最终会得到错误代码,其速度远不如C++快,并且在其他方​​面也存在缺陷。许多

c++ - asm.js 规范中提到的 c/c++ 虚拟机是什么

在介绍部分的asm.js规范(在http://asmjs.org/spec/latest/)中说“asm.js语言提供了类似于C/C++虚拟机的抽象”..但我无法通过谷歌搜索找到有关“C/C++虚拟机”的任何信息。有人可以启发我或指出描述“c/c++虚拟机”的书籍/网站的方向 最佳答案 Cstandard谈论它做出假设的抽象机器。我想这就是asm.js的作者所说的。 关于c++-asm.js规范中提到的c/c++虚拟机是什么,我们在StackOverflow上找到一个类似的问题:

windows - winddk : __iob_func redefinition

我正在尝试将用户空间库链接到Windows内核驱动程序。它引用了__iob_func,它是“libcmt.lib”(用户空间库)的一部分。我无法在winddk中访问此功能。因此,我计划为__iob_func定义一个stub,它将尝试模拟与用户空间库中相同的功能。有人知道__iob_func是做什么的吗?我在头文件中找到了函数的声明。但我不确定它到底有什么功能。 最佳答案 __iob_func()返回指向包含stdin、stdout、FILE描述符数组的指针,stderr和任何通过C运行时库打开的FILE对象。请参阅MSVC运行时库源

windows - ASM x64 中 40h REX 操作码的用途是什么?

我一直在努力理解ASMx64指令的0x40REX操作码的用途。例如,在Kernel32.dll的函数序言中:如您所见,他们将pushrbx用作:4053pushrbx但仅使用53h操作码(不带前缀)也会产生相同的结果:根据thissite,REX前缀的布局如下:所以40h操作码似乎没有做任何事情。谁能解释一下它的用途? 最佳答案 04xh字节(即040h、041h...04fh)确实是REX字节。正如您在问题中列出的那样,低半字节中的每一位都有一个含义。值040h表示REX.W、REX.R、REX.X和REX。B都是0。这意味着添加

c - C/x64 ASM 中的实用定界延续

我看过一篇名为APrimeronSchedulingFork-JoinParallelismwithWorkStealing的论文.我想实现持续窃取,其中调用spawn后的其余代码有资格被窃取。这是论文中的代码。1e();2spawnf();3g();4sync;5h();Animportdesignchoiceiswhichbranchtooffertothiefthreads.UsingFigure1,thechoicesare:ChildStealing:f()ismadeavailabletothiefthreads.Thethreadthatexecutede()execut

c++ - Asm CALL 指令 - 它是如何工作的?

我很想清楚地解释一下,在Windows环境(PE可执行文件)中,CALLXXXXXXXXXXXXXXX指令是如何工作的。我一直在研究PE格式,但我对CALLADDRESS指令、从dll中导入函数以及CALLADDRESS如何到达DLL中的代码之间的关系感到很困惑。除了ASLR和其他安全功能可能会围绕DLL移动之外,可执行文件如何应对这种情况? 最佳答案 它(即,直接调用带有普通相对调用的导入)不起作用,这就是为什么它不是这样做的原因。要调用导入的函数,您需要查看导入地址表(IAT)。简而言之,IAT中的条目首先指向函数名称(即它开始

c++ - 我写 Func1(int &a) 和 Func1(int *a) 有什么区别?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:DifferencebetweenpointervariableandreferencevariableinC++当我开始使用C++时,我发现下面的操作令人困惑。我了解了按引用传递和按值传递。但是最近我遇到了这样的功能,这让我很困惑:Func1(int&a)Func2(int*a)这两个函数都需要a的地址,但是当我调用Func1时,我通过Func1(a)来实现,如果是Func2,我通过Func2(&a)。为什么Func1在期待a的地址时直接接受inta?