48得票8回答
将寄存器值读入C变量

我记得曾经看到一种使用扩展的gcc内嵌汇编来读取寄存器值并将其存储到C变量中的方法。 但是,我无论如何都记不起如何形成asm语句了。

36得票12回答
Alloca实现

如何在D、C和C++等编程语言中使用内联x86汇编实现alloca()函数?我想创建一个稍加修改的版本,但首先需要了解标准版本的实现方式。从编译器的反汇编结果中读取并不有帮助,因为它们进行了许多优化,我只需要原始的实现形式。 编辑:我认为困难的部分是我希望这个函数具有常规函数调用语法,即使用...

35得票8回答
在C#中使用x86/x64 CPUID

与我的另一个问题相关,请帮我调试“System.AccessViolationException类型的未处理异常出现在未知模块中。其他信息:尝试读取或写入受保护的内存。这通常是其他内存损坏的迹象。”。通过代码步进,一切正常直到实际调用del()并且在那一行失败。 该代码基于这篇文章的示例和这...

35得票4回答
64位应用程序和内联汇编

我正在使用Visual C++ 2010开发32位Windows应用程序。有些东西我真的想使用内联汇编。但我刚刚意识到,Visual C++不支持64位应用程序中的内联汇编。因此,在将来进行64位移植是一个大问题。 我不知道64位应用程序与32位应用程序有什么不同。是否有可能所有32位应用程...

30得票4回答
标签地址(MSVC)

我们正在为一种高级编译语言编写字节码。经过一番分析和优化后,我们发现当前最大的性能开销是我们用于跳转到字节码案例的switch语句。 我们研究了一下,将每个案例标签的地址提取出来,并将其存储在字节码流中,而不是通常我们用于switch的指令ID。如果我们这样做,就可以跳过跳转表,直接跳转到当...

30得票5回答
我该如何在iPhone上使用内联汇编进行编程?

如何完成?我需要采取哪些步骤,需要考虑哪些陷阱和意外情况?

28得票2回答
如何通过syscall或sysenter在内联汇编中调用系统调用?

如何在 x86 Linux 中直接使用 sysenter/syscall 实现系统调用?有人可以提供帮助吗?如果您还能展示 amd64 平台的代码,那就更好了。 我知道在 x86 中,我们可以使用__asm__( " movl $1, %eax \n" " ...

25得票5回答
内联汇编破坏红区

我正在编写一个加密程序,其中核心部分(一个宽乘例程)是用x86-64汇编语言编写的,旨在提高速度,并且因为它广泛使用像adc这样不易从C中访问的指令。我不想内联此函数,因为它很大,并且在内部循环中被调用多次。 理想情况下,我还想为此函数定义自定义调用约定,因为它在内部使用所有寄存器(除了rs...

24得票2回答
ARM中是否有与rdtsc等效的指令?

为了我的项目,我必须使用内嵌汇编指令,例如rdtsc来计算一些C/C++指令的执行时间。 以下代码似乎在Intel处理器上可以工作,但在ARM处理器上不行:{unsigned a, d;asm volatile("rdtsc" : "=a" (a), "=d" (d)); t0 = ((uns...

23得票1回答
GCC内联汇编:约束条件

我很难理解GCC内联汇编(x86)中约束的作用。 我已经读过手册,它详细解释了每个约束所做的事情。 问题是,即使我了解每个约束的作用,我对为什么会使用一个约束而不是另一个约束或其影响有很少的了解。 我意识到这是一个非常广泛的话题,因此一个小例子应该有助于缩小重点。 以下是一个简单的汇编程序,...