我的要求是使用带内联汇编的变量设置EDI寄存器。我编写了以下代码片段,但无法编译。
uint32_t value = 0;
__asm__ __volatile__("mov %1,%%edi \n\t"
: "=D"
: "ir" (value)
:
);
我得到的错误是
cyg_functions.cpp(544):错误:预期a"(" :" ir" (值) ^
cyg_functions.cpp(544):内部错误:空指针 :" ir" (值)
修改
我想我对问题规范并不清楚。我们说我的要求如下。
如何使用内联汇编表明这一点?虽然这不是我的要求,但对此(特别是第1步)的答案将解决我的问题。我需要中间体专门用于EDI寄存器。
答案 0 :(得分:1)
我已经阅读了你的评论,这里的要求对我来说仍然没有意义。但是,理解并不是必需的。情况就是这样:
int main(int argc, char *argv[])
{
int res;
int value = argc;
asm ("shl $1, %[res]" /* Take the value in res (aka EDI) and shift
it left by 1. */
: [res] "=D" (res) /* On exit from the asm, the register EDI
will contain the value for "res". The
existing value of res will be overwritten. */
: "0" (value)); /* Take the contents of "value" and put it
in the same place as parameter #0. */
return res;
}
如果您从下往上阅读,这可能更容易理解。