Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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++ 需要将此unix程序集代码执行转换为windows等效代码_C++_C_Assembly - Fatal编程技术网

C++ 需要将此unix程序集代码执行转换为windows等效代码

C++ 需要将此unix程序集代码执行转换为windows等效代码,c++,c,assembly,C++,C,Assembly,我对装配完全陌生;目前,我正在尝试将下面提到的汇编代码执行转换为windows等效代码,但甚至没有得到任何提示。将下面提到的代码在asm块中移植到windows等效程序中的任何帮助都将不胜感激 void cpuid(uint32_t idx, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *e

我对装配完全陌生;目前,我正在尝试将下面提到的汇编代码执行转换为windows等效代码,但甚至没有得到任何提示。将下面提到的代码在asm块中移植到windows等效程序中的任何帮助都将不胜感激

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) );

}

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

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

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

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

您需要一个可以运行汇编语言的芯片。每个芯片都有自己的ISA指令集体系结构(汇编语言)。通常,编译器会将编程语言转换为汇编语言,如x86(英特尔和amd的ISA),然后由cpu处理

我不知道你想用C++和汇编语言一起做什么。但是如果你希望C++编译器将如何将这些汇编语言转换成x86汇编语言,那么它可以在你的计算机上运行,那么,你可以做的是得到仿效代码的仿真器,有点像LC3汇编语言(Patt Patel的计算系统入门)。p>
您可以查找等效的x86指令(我相信是操作码),并将其与ASM指令相匹配。从那里,您也许可以构建一个解析asm汇编代码的软件,并将其转换为x86,以便在x86上运行它

你需要一个能运行汇编语言的芯片。每个芯片都有自己的ISA指令集体系结构(汇编语言)。通常,编译器会将编程语言转换为汇编语言,如x86(英特尔和amd的ISA),然后由cpu处理

我不知道你想用C++和汇编语言一起做什么。但是如果你希望C++编译器将如何将这些汇编语言转换成x86汇编语言,那么它可以在你的计算机上运行,那么,你可以做的是得到仿效代码的仿真器,有点像LC3汇编语言(Patt Patel的计算系统入门)。p>
您可以查找等效的x86指令(我相信是操作码),并将其与ASM指令相匹配。从那里,您也许可以构建一个解析asm汇编代码的软件,并将其转换为x86,以便在x86上运行它

>假设使用Visual C++编译器,可以只使用y*cPuId()。请参阅说明和完整的样本。

< P>假设使用Visual C++编译器,可以使用y*CpUID()本机。有关说明和完整示例,请参阅。

查看Microsoft关于此主题的文章。Windows已经为您完成了这项工作,您无需亲自完成。

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

考虑到程序集引用的是x86指令CPUID和x86寄存器EAX-EDX,我敢打赌它已经用于x86。抱歉,但这在很大程度上是不正确的。这些指令是x86汇编,尽管是GCC的特殊汇编变体,而不是Intel的标准。大多数C和C++编译器支持内联汇编,它通常只用于C++范围之外的CPU指令的几个简单包装器功能,但在功能上有用(例如,控制CPU高速缓存同步、原子操作的内存障碍)或用于性能。(例如,并行操作,如SIMD、最有效位的索引,即-set-in-an-int…)CPU处理机器代码,而不是汇编。考虑程序集是指x86指令CPUID和x86寄存器EAX-EDX,我敢打赌它已经是X86抱歉,但大部分都是偏离基的。这些指令是X86汇编,虽然是GCC的特定汇编变型,而不是英特尔的标准。C++和C++COM。Pielver支持内联汇编,它通常用于C++以外的CPU指令的几个简单包装器功能,但在功能上有用(例如,控制CPU缓存同步、原子操作的内存障碍)或用于性能。(例如,并行操作,如SIMD,最高有效位的索引,即-set-in-an-int…)。CPU负责机器代码,而不是汇编。嗯,现在这显然是GCC风格,MSVC是Windows编译器,所以…(如果我熟悉内联asm语法,我会回答,但我不知道)@Potatoswatter:Windows编译器?哦,亲爱的。RIP mingw,Comeau,cygwin/g++,等等;-(更严肃地说,fair call:-)。好吧,现在这显然是GCC风格,MSVC是Windows编译器,所以…(如果我熟悉内联asm语法,我会回答,但我不知道)@Potatoswatter:Windows编译器?哦,亲爱的。RIP mingw,Comeau,cygwin/g++,等等-(更严肃地说,公平的要求:-)。