Wie kann ich mir die register geben lassen in C inline asm



  • hallo ich versuche mit dem watcom die register geben zu lassen aber scheint nicht zu funktionieren wie kann ich das machen ?

    ich habe so versucht :

    unsigned int c_ax,c_bx,c_cx; ....

    asm{
    mov c_ax,ax
    mov c_bx,bx
    mov c_dx,dx
    };

    es funktioniert nicht !!
    also ich arbeite mit dem watcom der solte wie der VC++ arbeiten.

    danke



  • Was funktioniert daran nicht, bzw. welche Werte erwartest du in den Registern?
    Solche Sprachenwechsel zwischen c und asm sind eher ungeschickt und eigentlich kannst du davon ausgehen, dass die Register nicht mehr die gleichen Werte haben, wenn du einen asm block verlaesst und dazwischen c code hast.



  • um vom protected mode in real mode zu gelangen muss ich mir die real mode registern sichern und später wieder an die stelle zu gelangen wo diese zu pmode geschaltet war ?

    tschja hast eine bessere lösung ?:)

    danke 🙂



  • Den ersten Teil bitte nochmal präzisieren/umformulieren, den habe ich ueberhaupt nicht verstanden/konnt keine Verbindung zum Thema dieses Threads herstellen.

    Eine bessere Loesung: Wenn du bestimmte Register, die in einem asm-Block gesetzt wurden, in eine Variable kopieren willst, musst du das in dem selben asm-Block tun, in dem sie gesetzt wurden.

    Beispiel:

    //so gehts nicht:
    __asm{
    mov ax,0123h
    mov bx,4567h
    };
    int blabla=blubbb*12582+irgendwas+bla;
    __asm{
    mov c_ax,ax
    mov c_bx,bx
    };
    
    //so waers richtig:
    __asm{
    mov ax,0123h
    mov bx,4567h
    mov c_ax,ax
    mov c_bx,bx
    };
    

    [ Dieser Beitrag wurde am 27.07.2002 um 19:14 Uhr von Nobuo T editiert. ]



  • Also wenn du alle register sichenr willst, würde ich pusha nehmen, das ist nämlich äquivalent zu (zumindest im 32-bit-mode ;))

    temp := esp
    push eax
    push ecx
    push edx
    push ebx
    push temp (also den esp vor der ganzen sache)
    push ebp
    push esi
    push edi

    Und dann liegen alle Register schön brav aufm Stack 🙂


Anmelden zum Antworten