【发布时间】:2018-05-20 22:18:09
【问题描述】:
在我的程序中,我需要将 NOP 作为内联汇编插入到循环中,并且 NOP 的数量可以通过一个参数来控制。像这样的:
char nop[] = "nop\nnop";
for(offset = 0; offset < CACHE_SIZE; offset += BLOCK_SIZE) {
asm volatile (nop
:
: "c" (buffer + offset)
: "rax");
}
有没有办法告诉编译器将上面的内联汇编转换成下面的?
asm volatile ("nop\n"
"nop"
:
: "c" (buffer + offset)
: "rax");
【问题讨论】:
-
您不能将程序集模板字符串作为 char * 变量传入。
-
你真正想做什么?为什么需要这个?
-
@EricPostpischil 操作数无关紧要。需要通过在 for 循环中插入 NOP 来控制缓存启动率。
-
“缓存启动率”是什么意思?您是否试图限制某些代码的执行速度?除了插入 nop 之外,还有其他方法。而且,如果您确实需要执行可变数量的 nop,您可以计算跳转到它们的序列中。这闻起来像XY problem。你应该充分解释上下文。
标签: c gcc assembly x86 inline-assembly