需要将此unix汇编代码执行转换为等效的Windows

时间:2010-08-26 04:57:36

标签: c++ c assembly

我对组装完全不熟悉;目前我正在尝试将下面提到的汇编代码执行转换为等效的Windows,但甚至没有获得一个提示。任何帮助将asm块中的下述代码移植到等效的窗口都将受到高度赞赏。

void cpuid(uint32_t idx,
                  uint32_t *eax,
                  uint32_t *ebx,
                  uint32_t *ecx,
                  uint32_t *edx)
{

 asm volatile (
        "test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid"
        : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
        : "0" (idx), "1" (pv_context) );

}

5 个答案:

答案 0 :(得分:5)

汇编语言变体与CPU系列/型号有关,而与操作系统无关。此外,这看起来像是特定编译器支持的特殊asm编码...所以您可能希望使用相同的编译器(如果是可移植的)和/或端口到特定目标编译器的表示法。除非您解释可以定位的编译器,否则没有人可以帮助您。

答案 1 :(得分:4)

假设您使用Visual C ++编译器,您可以使用__cpuid()内在函数。有关说明,请参阅here,完整示例请参见here

答案 2 :(得分:0)

您可以尝试在函数中设置断点(使用平台的调试器),并复制生成的机器代码。可能在Windows上使用相同的机器代码,或者至少它可以帮助您领先。

答案 3 :(得分:0)

查看Microsoft关于此主题的KB888282文章。 Windows已经为您完成了这项工作,您不需要自己动手。

答案 4 :(得分:-3)

您需要一个可以运行汇编语言的芯片。每个芯片都有自己的ISA,指令集架构(汇编语言)。通常,编译器会将编程语言转换为汇编语言,例如x86(intel和amd的ISA),然后cpu负责处理它。

我不知道你在尝试用C ++和汇编语言做些什么。但是,如果您希望C ++编译器将这些汇编语言转换为x86汇编语言,那么它可以在您的计算机上运行,​​那么没有。你能做的就是得到某种仿真代码的仿真器,有点像LC3汇编语言(由Patt Patel介绍计算系统)。

您可以做的是查找等效的x86指令(我相信的操作码)并将其与您的ASM指令相匹配。从那里你可以构建一个解析asm汇编代码并将其转换为x86的软件,这样你就可以在x86上运行它。