Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Assembler, kleines Verständisproblem

  Alt 18. Apr 2004, 00:31
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat