PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was macht ASM_MUL64_REG?



7.e.Q
11-01-2007, 09:46
Hi Leute,

beschäftige mich gerade mit dem HPET. Was macht die folgende ASM "Funktion" (verstehe die Syntax des Assemblercodes hier noch nicht):


#define ASM_MUL64_REG(eax_out,edx_out,reg_in,eax_in) \
__asm__ __volatile__("mull %2" \
:"=a" (eax_out), "=d" (edx_out) \
:"r" (reg_in), "0" (eax_in))


??? Ich vermute, es werden hier Werte in 'nem 64bit Zahlenraum multipliziert. Aber was mit wem und wo und wie?

Danke

Grüße,
Hendrik

Vincent Vega
11-01-2007, 12:03
Die Syntax von Inline-Assembler in gcc ist:

"befehl" : output : input

wobei output und input jeweils aufgebaut sind wie

"constraint" (variable)


eax_in wird vor Ausführung des Assembler-Befehls im Register $eax abgelegt. "0" (eax_in) weisst den Inline-Assembler darauf hin, dass es sich hier um den selben Constraint wie die 0-te Output-Variable (eax_out) handelt.

reg_in wird in einem beliebigen Register abgelegt und als "Parameter" dem Assembler-Befehl übergeben.

eax_out und edx_out enthalten die Werte von der Register $eax und $edx nach Ausführung des Befehls.

Nun musst Du nur noch rausfinden, was MULL mit den Registern macht :)