发布网友 发布时间: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是个内存地址。再就是如果没有传入参数就不用加了,另要把更改的寄存器写出来。我发现不写出来编译不过去。