gcc内联汇编问题

发布网友 发布时间:2022-04-24 04:39

我来回答

1个回答

热心网友 时间:2023-10-28 22:28

unsigned int temp1;

int main(int argc, char* argv[]){

__asm__ __volatile__(
"pusha\n\t"
"mov $1, %%eax\n\t"
"cpuid\n\t"
"mov %%ecx, %0\n\t"
"popa"
:"=m"(temp1)::"eax","ecx"
);

printf("%x\r\n",temp1);

return 1;

}
=r是任意任务一个寄存器,你不可以打印一个寄存器的值吧,所以改成=m表示temp1是个内存地址。再就是如果没有传入参数就不用加了,另要把更改的寄存器写出来。我发现不写出来编译不过去。

热心网友 时间:2023-10-28 22:28

unsigned int temp1;

int main(int argc, char* argv[]){

__asm__ __volatile__(
"pusha\n\t"
"mov $1, %%eax\n\t"
"cpuid\n\t"
"mov %%ecx, %0\n\t"
"popa"
:"=m"(temp1)::"eax","ecx"
);

printf("%x\r\n",temp1);

return 1;

}
=r是任意任务一个寄存器,你不可以打印一个寄存器的值吧,所以改成=m表示temp1是个内存地址。再就是如果没有传入参数就不用加了,另要把更改的寄存器写出来。我发现不写出来编译不过去。

热心网友 时间:2023-10-28 22:28

unsigned int temp1;

int main(int argc, char* argv[]){

__asm__ __volatile__(
"pusha\n\t"
"mov $1, %%eax\n\t"
"cpuid\n\t"
"mov %%ecx, %0\n\t"
"popa"
:"=m"(temp1)::"eax","ecx"
);

printf("%x\r\n",temp1);

return 1;

}
=r是任意任务一个寄存器,你不可以打印一个寄存器的值吧,所以改成=m表示temp1是个内存地址。再就是如果没有传入参数就不用加了,另要把更改的寄存器写出来。我发现不写出来编译不过去。

热心网友 时间:2023-10-28 22:28

unsigned int temp1;

int main(int argc, char* argv[]){

__asm__ __volatile__(
"pusha\n\t"
"mov $1, %%eax\n\t"
"cpuid\n\t"
"mov %%ecx, %0\n\t"
"popa"
:"=m"(temp1)::"eax","ecx"
);

printf("%x\r\n",temp1);

return 1;

}
=r是任意任务一个寄存器,你不可以打印一个寄存器的值吧,所以改成=m表示temp1是个内存地址。再就是如果没有传入参数就不用加了,另要把更改的寄存器写出来。我发现不写出来编译不过去。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com