嵌入汇编问题求教,紧急!紧急!(200分)

C

chentf

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一段代码得出CPU厂家:
int mycpuid[20];
tchar zzz[20];
_asm
{
mov eax,0
cpuid
mov mycpuid[0],ebx
mov mycpuid[4],edx
mov mycpuid[8],ecx
}
sprintf(zzz,"CPU厂家为:",mycpuid);
在VC中编译通过。
然而我在DELPHI中却总是无法通过!并且不认cpuid(注:CPUID为微处理器中的一条指令)
由于事情紧急,请诸位多多帮忙,不胜感激!
 
Microsoft留了一手呗。
delphi中不认这条asm指令的,可以看一下指令代码, 然后用inline直接嵌入机器码。
 
CPUID这一句换成:
DW $A20F
 
var
a:array of integer;
begin
asm
mov eax,0
DW $A20F
mov a[0],ebx
mov a[4],edx
mov a[8],ecx
end;
按F9执行,出现错误提示框:
project project1.exe raised exception class ezccessviolation with message 'accessviolation at address 00404B58 in module 'project1.exe',write of address 7563653f'.
然后由于水平有限,也看不懂CPU中的消息.
 
试试以下代码:
var
a:array[0..15] of byte;
dword save_edi, save_esi, save_esp, save_ebp, save_ebx;
begin
asm
mov save_edi, EDI
mov save_esi, ESI
mov save_esp, ESP
mov save_ebp, EBP
mov save_ebx, EBX
mov eax,0
DW $A20F
lea esi, a
mov edi, 0

// mov a[0],ebx
mov dword ptr [esi+edi], ebx
add edi, 4
// mov a[4],edx
mov dword ptr [esi+edi], edx
add edi, 4
// mov a[8],ecx
mov dword ptr [esi+edi], ecx

mov ebx, save_ebx
mov ebp, save_ebp
mov esp, save_esp
mov esi, save_esi
mov EDI, save_edi
end;
end;
 
多人接受答案了。
 
顶部