Moin d3g,
es ist zwar richtig, dass man mit einem 32 Bit grossen Register 4GB Adressen erreichen kann, dennoch ist in den Opcodes der Befehle auch ein Segmentregister (CS, DS, ES, FS, GS, SS) mit kodiert, dessen Inhalt mit zur Adressbildung herangezogen wird.
Beispiel:
EBP = 48
DS = 100
FS = 200
Dann würde man bei
Code:
mov EAX,DWORD PTR [color=red]DS[/color]:[EBP-8]
den Inhalt des DWORD ab Adresse 140 nach EAX holen, und bei
Code:
mov EAX,DWORD PTR [color=red]FS[/color]:[EBP-8]
ab Adresse 240
Wenn also die Segmentregister nicht den gleichen Inhalt haben, spielt deren Angabe durchaus eine Rolle.
@Shareholder:
Zitat von
shareholder:
frage: mov eax, byte ptr [ebp+edx-11]
angenommen ebp=66 & edx=45, dann liegt nach der durchführung des befehls der wert 100
im eax ?
Ich kann mir nicht vorstellen, dass Du die Zeile in einem Programm gesehen hast.
Vermutlich meinst Du
mov al,byte ptr[ebp+edx-11]
um Dein Beispielergebnis zu erreichen müsstest Du den Befehl LEA (Load Effective Address) nehmen, und das Segmentregister müsste den Wert 0 haben.