AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Assembler, kleines Verständisproblem
Thema durchsuchen
Ansicht
Themen-Optionen

Assembler, kleines Verständisproblem

Ein Thema von shareholder · begonnen am 17. Apr 2004 · letzter Beitrag vom 19. Apr 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von shareholder
shareholder

Registriert seit: 1. Nov 2003
Ort: Denmark, Lolland, Marielyst
280 Beiträge
 
Delphi 7 Enterprise
 
#1

Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 09:09
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 ?
Mastdarmpapillenentzündung ist cool
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#2

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 10:33
Zitat von shareholder:
kann mich mal jmd. aufklären und mir bitte sagen,
was folgende auschnitt aus befehlszeilen zu bedeuten haben:
[ebp-08] ist der der Inhalt der Speicherstelle "Inhalt von ebp minus 8". Wenn in ebp z.b. 0xDEADBEEF ist, dann ist ebp-8 0xDEADBEE7. Wenn an der Speicherstelle 0xDEADBEE7 nun 0xAB steht, ist [ebp-08] 0xAB. Analog gilt das gleiche für [ebp+edx-71].

Zitat von shareholder:
ich konnte in meinem buch nicht's über :

eax
edx
edi
Die gleichen Register wie ax, dx und di, nur 32-bittig. mit ax, dx und di greifst du in 32-bit-Assembler auf den niederwertigen Teil von eax, edx und edi zu.
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von shareholder
shareholder

Registriert seit: 1. Nov 2003
Ort: Denmark, Lolland, Marielyst
280 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 12:02
ok, also den ersten teil, hab ich verstanden ! danke

aber den 2. net so richtig
kannst du bitte nochmal irgendwie anders erklären ?

wäre klasse !
Mastdarmpapillenentzündung ist cool
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#4

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 12:31
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ß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Benutzerbild von shareholder
shareholder

Registriert seit: 1. Nov 2003
Ort: Denmark, Lolland, Marielyst
280 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 12:54
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.
Mastdarmpapillenentzündung ist cool
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 15:58
Moin Shareholder,

da die von Dir angegebenen Ausdrücke kaum alleine stehen, gehe ich mal davon aus, dass es, z.B.,
mov EAX,DWORD PTR [EPB-8] heisst.

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:
push EBP
mov EBP,ESP
eventuell auch noch mehr.

BTW: Stand da wirklich nur DWORD PTR [EBP-8] und nicht etwas DWORD PTR SS:[EBP-8]?
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
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#7

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 17:19
Zitat von Christian Seehase:
BTW: Stand da wirklich nur DWORD PTR [EBP-8] und nicht etwas DWORD PTR SS:[EBP-8]?
ebp reicht doch, um 4 GB Speicher zu adressieren, warum sollte man dazu 64 bit benutzen?
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von shareholder
shareholder

Registriert seit: 1. Nov 2003
Ort: Denmark, Lolland, Marielyst
280 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 17:38
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 ?
Mastdarmpapillenentzündung ist cool
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 18:02
Nein.

Wenn dort stünde:
Code:
mov eax, byte ptr ebp+edx-11
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).


gruss,
dizzy (der auch in seinen ersten Zügen mit asm liegt )
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Assembler, kleines Verständisproblem

  Alt 17. Apr 2004, 23: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
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz