我对组装完全不熟悉;目前我正在尝试将下面提到的汇编代码执行转换为等效的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) );
}
答案 0 :(得分:5)
汇编语言变体与CPU系列/型号有关,而与操作系统无关。此外,这看起来像是特定编译器支持的特殊asm编码...所以您可能希望使用相同的编译器(如果是可移植的)和/或端口到特定目标编译器的表示法。除非您解释可以定位的编译器,否则没有人可以帮助您。
答案 1 :(得分:4)
答案 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上运行它。