![]() |
Assembler, kleines Verständisproblem
kann mich mal jmd. aufklären und mir bitte sagen,
was folgende auschnitt aus befehlszeilen zu bedeuten haben: 1.) dword ptr [ebp-08] 2.) byte ptr [ebp+edx-71] ptr ist ja sicherlich der pointer, aber was ist [ebp-08] bzw. [ebp+edx-71] ? ist das ne bestimmte adresse ? außerdem: ich konnte in meinem buch nicht's über : eax edx edi lesen, was bedeutet das ? |
Re: Assembler, kleines Verständisproblem
Zitat:
Zitat:
|
Re: Assembler, kleines Verständisproblem
ok, also den ersten teil, hab ich verstanden ! danke
aber den 2. net so richtig :( kannst du bitte nochmal irgendwie anders erklären ? :gruebel: wäre klasse ! :angle: |
Re: Assembler, kleines Verständisproblem
das "e" in "eax" usw. steht für "enhanced" also "Erweitert". Kam beim Übergang von 16bit auf 32bit Prozessoren in's Spiel.
Das nunmehr 32bit breite Register "AX" sprach man nunmehr mit "EAX" an. Verwendete man nur "AX", dann lieferte das einem nur die letzten (niederwertigen) 16 bit des 32bit-Registers zurück. Gruß |
Re: Assembler, kleines Verständisproblem
ah danke, und schon wieder etwas dazugelernt ! :)
letzte frage ersteinmal : kennt ihr eine gute seite, wo die schiebe - und rotationsbefehle ausführlich und einfach erklärt sind, ich kann den beschreibungen in meinem buch nicht nachvollziehen und google bringt auch nix brauchbares. :( |
Re: Assembler, kleines Verständisproblem
Moin Shareholder,
da die von Dir angegebenen Ausdrücke kaum alleine stehen, gehe ich mal davon aus, dass es, z.B.,
Delphi-Quellcode:
heisst.
mov EAX,DWORD PTR [EPB-8]
Das würde bedeuten, dass die zweite lokale Variable nach EAX geladen wird. Entweder der Wert selber (wenn es sich z.B. um eine Variable vom Typ integer handelt), oder aber deren Adresse (wenn es z.B. ein Objekt ist), wird aus der Adresse geladen, auf die der Inhalt von EBP-8 zeigt. Vor der Zeile steht bestimmt noch
Delphi-Quellcode:
eventuell auch noch mehr.
push EBP
mov EBP,ESP BTW: Stand da wirklich nur DWORD PTR [EBP-8] und nicht etwas DWORD PTR SS:[EBP-8]? |
Re: Assembler, kleines Verständisproblem
Zitat:
|
Re: Assembler, kleines Verständisproblem
hi Christian Seehase,
ne, der code stimmt schon. d3g hat's ja erklärt. 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 ? hab ich das richtig verstanden ? |
Re: Assembler, kleines Verständisproblem
Nein.
Wenn dort stünde:
Code:
also ohne die eckigen Klammern, DANN wäre deine Folgerung richtig. Die Klammern sind in Assembler die Dereferenzierungs-Operatoren (geiles Wort!), dass heisst es würde in EAX der Wert stehen, der an der Stelle 100 im Speicher steht. Das kann irgendwas sein. Zusätzlich wird dieser Wert nach "Byte" gecastet ("byte ptr" heisst, dass der Pointer auf 1 Byte zeigen soll).
mov eax, byte ptr ebp+edx-11
gruss, dizzy (der auch in seinen ersten Zügen mit asm liegt ;) ) |
Re: Assembler, kleines Verständisproblem
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:
den Inhalt des DWORD ab Adresse 140 nach EAX holen, und bei
mov EAX,DWORD PTR [color=red]DS[/color]:[EBP-8]
Code:
ab Adresse 240
mov EAX,DWORD PTR [color=red]FS[/color]:[EBP-8]
Wenn also die Segmentregister nicht den gleichen Inhalt haben, spielt deren Angabe durchaus eine Rolle. @Shareholder: Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz