Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 内联程序集:错误的寄存器名_C_Gcc_Inline Assembly - Fatal编程技术网

C 内联程序集:错误的寄存器名

C 内联程序集:错误的寄存器名,c,gcc,inline-assembly,C,Gcc,Inline Assembly,编译此文件时,我收到“错误:错误的寄存器名''%ecx'” #include <stdio.h> int main(void){ asm("mov 3, %%ecx\n\t"); // ... return 0; } #包括 内部主(空){ asm(“mov 3,%%ecx\n\t”); // ... 返回0; } 当您想要使用gcc的“扩展内联汇编”以及输入、输出和缓冲列表时,使用寄存器的双百分比符号。这是因为内联汇编程序根据这些列表和%后面的数字保留了

编译此文件时,我收到“错误:错误的寄存器名''%ecx'”

#include <stdio.h>

int main(void){
    asm("mov 3, %%ecx\n\t");
    // ...
    return 0;
}
#包括
内部主(空){
asm(“mov 3,%%ecx\n\t”);
// ...
返回0;
}

当您想要使用gcc的“扩展内联汇编”以及输入、输出和缓冲列表时,使用寄存器的双百分比符号。这是因为内联汇编程序根据这些列表和
%
后面的数字保留了一个百分号来替换实际操作数名称

如果不想使用“扩展”内联程序集,只需使用普通的AT&t语法即可。这样做:

int main(void)
{
    asm("mov 3, %ecx\n\t");
    return 0;
}

与gcc 4.6.3完美配合。我还假设您知道
mov3、%ecx
mov3、%ecx

当您想要使用gcc的“扩展内联汇编”以及输入、输出和缓冲列表时,会使用寄存器的双百分比符号。这是因为内联汇编程序根据这些列表和
%
后面的数字保留了一个百分号来替换实际操作数名称

如果不想使用“扩展”内联程序集,只需使用普通的AT&t语法即可。这样做:

int main(void)
{
    asm("mov 3, %ecx\n\t");
    return 0;
}

与gcc 4.6.3完美配合。我还假设您知道
mov3、%ecx
mov3、%ecx

之间的区别,为什么要使用百分之二的符号?还有,
\n\t
的任何原因?这不是printf格式;不需要这些。什么编译器?内联汇编程序语法依赖于编译器。@mat@Jongware我在windows 64位上使用gcc@キューゾリファイ 你完全错了(大概是%),你试着看的时间比你争辩的时间要少!关于
\n\t
,如果没有多条指令,这是一种无害无益的情况。为什么要使用百分之二的符号?还有,
\n\t
的任何原因?这不是printf格式;不需要这些。什么编译器?内联汇编程序语法依赖于编译器。@mat@Jongware我在windows 64位上使用gcc@キューゾリファイ 你完全错了(大概是%),你试着看的时间比你争辩的时间要少!关于
\n\t
当您没有多条指令时,这是一种无害无帮助的情况;int-dst=0;asm(“mov$0x03,%ecx\n\trpt:\n\t\tnop\n\tloop rpt”:“=r”(dst):“r”(src))现在我得到了在%-字母之后缺少操作数的
@キューゾリファイ 当使用扩展格式
asm()
(且仅使用扩展格式)时,必须在寄存器上使用
%%
,在操作数上仅使用一个
%%
。阅读你之前评论的链接!谢谢对不起,我昨天晚上才开始做这个。事实上,我想创建一个循环
intsrc=1;int-dst=0;asm(“mov$0x03,%ecx\n\trpt:\n\t\tnop\n\tloop rpt”:“=r”(dst):“r”(src))
现在我得到了在%-字母之后缺少操作数的
@キューゾリファイ 当使用扩展格式
asm()
(且仅使用扩展格式)时,必须在寄存器上使用
%%
,在操作数上仅使用一个
%%
。阅读你之前评论的链接!谢谢对不起,我昨天晚上才开始。