C++字到字节
我尝试使用 C++ 中的汇编程序读取 CPUID。我知道 中有它的功能,但我想要 asm 方式。因此,CPUID 执行后,应该用 ASCII 编码字符串填充 eax、ebx、ecx 寄存器。但我的问题是,由于我只能在 asm 中寻址完整或半 eax 寄存器,因此如何将 32 位分解为 4 个字节。我用过这个:
#include <iostream>
#include <stdlib.h>
int main()
{
_asm
{
cpuid
/*There I need to mov values from eax,ebx and ecx to some propriate variables*/
}
system("PAUSE");
return(0);
}
I tried to read CPUID using assembler in C++. I know there is function for it in , but I want the asm way. So, after CPUID is executed, it should fill eax,ebx,ecx registers with ASCII coded string. But my problem is, since I can in asm adress only full, or half eax register, how to break that 32 bits into 4 bytes. I used this:
#include <iostream>
#include <stdlib.h>
int main()
{
_asm
{
cpuid
/*There I need to mov values from eax,ebx and ecx to some propriate variables*/
}
system("PAUSE");
return(0);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Linux 内核源代码展示了如何实现 使用内联汇编执行 x86 cpuid。语法是 GCC 特定的;如果您使用的是 Windows,这可能没有帮助。
一旦您拥有这种格式的函数(请注意,EAX、ECX 是输入,而所有四个都是输出),您可以轻松分解调用者中的各个位/字节。
The Linux kernel source shows how to execute x86 cpuid using inline assembly. The syntax is GCC specific; if you're on Windows this probably isn't helpful.
Once you have a function in this format (note that EAX, ECX are inputs, while all four are outputs), you can easily break out the individual bits/bytes in the caller.
我不明白为什么你不使用提供的函数
任一链接真正的汇编代码真正的人走的路;-)
或者使用常用方式
I don't understand why you don't use the provided function anyway
Either link real assembly code the way real man go ;-)
Or use the common way