我一直在学校学习汇编,我正在尝试将其应用于实际情况。我有一个不再受支持的产品,我想看看使用 CPUID 执行多项检查的部分代码是如何工作的。我只研究过 MIPS 架构,所以我使用 x86 指令和寄存器的参考来理解。拆解如下:
007b65ef b8 01 00 MOV EAX,0x1
00 00
007b65f4 0f a2 CPUID
007b65f6 a3 28 11 MOV [DAT_00af1128],EAX = ??
af 00
007b65fb 89 1d 24 MOV dword ptr [DAT_00af1124],EBX = ??
11 af 00
007b6601 89 15 20 MOV dword ptr [DAT_00af1120],EDX = ??
11 af 00
007b6607 89 0d 1c MOV dword ptr [DAT_00af111c],ECX = ??
11 af 00
这是它编译成的 C 代码
puVar4 = (undefined4 *)cpuid_Version_info(1);
_DAT_00af1128 = *puVar4;
_DAT_00af1124 = puVar4[1];
_DAT_00af1120 = puVar4[2];
_DAT_00af111c = puVar4[3];
我不明白的是_DAT_00af1128
,当程序集将地址移入寄存器时,值是如何存储的,而不是相反。我本以为应该是MOV EBX, dword ptr [DAT_00af1124]