7得票1回答
在函数中更改数组值 - 内联汇编

我之前学习了x86汇编语言,最近在尝试使用C++内联汇编。 我的想法是,在函数的参数中传递一个数组、一个索引(无符号整数)和一个数字。通过汇编语言,它将改变数组中该内存位置的值为传入的值。代码看起来像这样: inline void Set( int pArray[], unsigned i...

8得票1回答
避免在汇编中对灵活的第二操作数进行硬数字移位。

这个问题涉及到 ARM 汇编语言。 我的问题是是否可以使用宏来替换 ASM 代码中的立即数,以便于我不必硬编码数字。 我不确定上面的问题是否清晰明了,因此我将提供一些带有 asm 代码的示例: 在 ARM 上存在一些指令,如 ror 指令(https://developer.arm.co...

68得票3回答
__asm__ __volatile__ 在 C 语言中的作用是什么?

我查看了来自http://www.mcs.anl.gov/~kazutomo/rdtsc.html的一些C代码。 他们使用了诸如__inline__,__asm__等内容,例如以下示例: 代码1:static __inline__ tick gettick (void) { unsig...

12得票6回答
使用带立即数的指令与GCC内联汇编

问题 我正在为ARM Cortex-M3处理器开发自定义操作系统。为了与我的内核交互,用户线程必须生成一个超级管理员调用(SVC)指令(以前称为软件中断SWI)。在ARM ARM中,该指令的定义如下: 这意味着该指令需要一个立即数参数,而不是一个寄存器值。 这使我难以以易读的方式设计...

8得票3回答
使用条件标志作为GNU C内联汇编输出

我正在处理一些代码,其中将条件标志从内联汇编块中输出并将其用作在调用C代码中进行分支的条件非常理想。我不想存储标志(这将是无用且低效的;已经有更有效的方法来实现结果),而是直接使用标志。是否有任何方法可以使用GNU C内联汇编约束来实现此目的?我对适用于多个指令集体系结构的方法感兴趣,旨在将其...

18得票4回答
GNU汇编中的.byte汇编指令有什么用途?

在查看一些内嵌汇编的C代码时,我遇到了一个以点号开头的 .byte 指令。 通过在网上查找汇编参考文献,我发现它用于在内存中保留一个字节。 但是在代码中,该语句之前没有标签。所以我想知道未标记的 .byte 指令或任何其他数据存储指令的用途。 例如,如果我编写 .byte 0x0a,我该...

17得票7回答
GCC移除内联汇编代码

似乎gcc 4.6.2会从函数中删除它认为未使用的代码。 test.cint main(void) { goto exit; handler: __asm__ __volatile__("jmp 0x0"); exit: return 0; } 主函数 main() ...

9得票2回答
C/C++将int转换为short和inline asm(ARM特定)

这不是一个简单的问题。注意:我不需要使用纯汇编的意见或建议。我实际上需要完成我所说的事情:在将结果分配给short int时获取内联汇编,而无需此符号/零扩展操作码。 我正在处理一个滥用16位短整型的库,并对其进行优化。我需要添加一些带有内联汇编的优化函数。问题在于,在许多地方,函数的结果被分...

7得票1回答
C语言中的x64内联汇编以对齐指令

我有一个非常热门的指令循环,需要在32字节边界上正确对齐,以最大化Intel's Instruction Fetcher效率。 这个问题特定于Intel不太老的CPU系列(从Sandy Bridge开始)。如果未能正确对齐循环的开头,则会导致高达20%的速度损失,这绝对是太明显了。 这个问题...

14得票2回答
为什么MSVC不支持AMD64和Itanium目标的内联汇编?

昨天我了解到,在使用Microsoft Visual C++ 编译AMD64和Itanium目标时,不支持使用__asm关键字进行内联汇编。 这是否正确?如果是的话,有人知道为什么不支持这些目标上的内联汇编吗?似乎这是一个相当重要的特性就这样消失了...