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 ediUnd dann liegen alle Register schön brav aufm Stack