OpenWatcom & Inline-Assembler
-
Hallo!
Ich programmiere normalerweise mit GCC, habe jetzt aber mal den OpenWatcom Compiler ausprobiert. Abgesehen von ein paar komischen Eigenarten ist der eigendlich ganz nett. Beim Inline-Assembler hab ich die größten Probleme. Das folgende Makro verwende ich im GCC:
#define CPUID(p1,p2,p3,p4,p5) asm("cpuid" : "=a"(p1), "=b"(p2), "=c"(p3), "=d"(p4) : "a"(p5));
In der entsprechenden Umsetztung für Open Watcom habe ich arge probleme. Ich hab schon folgenes ohne Erfolg versucht:
void CPUID(int &p1, int &p2, int &p3, int &p4, int p5); #pragma aux CPUID = "mov eax, p5" "cpuid" "mov p1, eax" "mov p2, ebx" "mov p3, ecx" "mov p4, edx" modify [EAX EBX ECX EDX];
Leider meckert der Compiler, dass p5 nicht deklariert ist.
Wie mach ich das richtig?
-
void CPUID (int &eax, int &ebx, int &ecx, int &edx, int val); #pragma aux CPUID = \ ".586" \ "push eax" \ "push ebx" \ "push ecx" \ "push edx" \ "mov eax, esi" \ "cpuid" \ "mov esi, [esp]" \ "mov [esi], edx" \ "mov esi, [esp+4]" \ "mov [esi], ecx" \ "mov esi, [esp+8]" \ "mov [esi], ebx" \ "mov esi, [esp+12]" \ "mov [esi], eax" \ "add esp, 16" \ parm [eax] [ebx] [ecx] [edx] [esi] \ modify [esi eax ebx ecx edx];
-
Oh, danke!
Ich hab ehrlich gesagt nicht gedacht, dass sich hier noch Leute ernsthaft mit Nostalgie-Compilern befassen.