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.


Anmelden zum Antworten