002
12.04.2005, 23:36 Uhr
~CDW
Gast
|
Syntax: MUL Operand Dann wird Operand mit (E)AX multipliziert Operand kann eine Speichervariable oder ein Register sein. man beachte dabei dass wenn Operand=1Byte, wird dieser dann mit AL multiplizeirt und das Ergebnis ist in AX zu bewundern, bei einem WORD wird es mit AX multipliziert und das Ergebnis steht in DX/AX schließlich bei einem DWORD wird komplett mit EAX multipliziert und das Ergebist in EDX,EAX geschrieben.
Speziell zu "Wie jetzt: (E)DX und (E)AX ???" Wenn man nämlich
Code: |
mov ax,0FFFFh mob bx,2 mul bx
|
macht, dann kommt ja:1FFFE raus und das passt dann nicht mehr in den AX Register, also wird es aufgeteilt: FFFE steht dann in AX und die 1 die da nicht mehr reinpasst steht in DX (man spricht dann auch von höcherwertiges Word(DX) und niererwertiges (AX) das ganze ist noch aus der Zeit "rübergeschleppt" worden als die CPU nur 16-Bit Register hatte. Als die Extension kam, hat man das für EAX und EDX übernommen =>es ist also möglich 2 32-Bit Zahlen zu multiplizieren und das Ergebnis komplett zu erhalten ohne die FPU bemühen zu müssen:
Code: |
mov eax,0ffffffffh mob ebx,0ffffffffh mul ebx
|
kommt FFFFFFFE00000001 raus und in EAX steht dann die 1 und in EDX eben die FFFFFFFE |