|
You last visited: Today at 03:21
Advertisement
ASM Adressierungs Frage
Discussion on ASM Adressierungs Frage within the General Coding forum part of the Coders Den category.
12/31/2008, 14:46
|
#1
|
elite*gold: 0
Join Date: Dec 2008
Posts: 14
Received Thanks: 2
|
ASM Adressierungs Frage
Hi,
ich hab so basis bis mittelgute assembler kenntnisse will ich mal behaupten, allerdings is mir letztens ein stück code über den weg gelaufen den ich nich so ganz verstehe. vielleicht kann mir einer von euch ja mal kurz erklären was da hinter stekt ^^
code:
mov [ebx],eax
(aus einem video tutorial für tsearch, welches hier in einem andern thread gepostet wurde)
also ich kenn das halt nur andersrum, wenn in eax eine adresse steht und ich auf den wert zugreifen will, würde ich ja z.b. mov ebx,[eax] machen.
aber wenn ich dem ebx register einen wert oder eine adresse zuweisen will, was auch immer, dann mach ich das doch einfach mit "ebx" und nicht "[ebx]", oder nicht?
mfg
loona
|
|
|
12/31/2008, 17:03
|
#2
|
elite*gold: 0
Join Date: Feb 2008
Posts: 33
Received Thanks: 0
|
Nicht allzuschwer zu erklären, und zwar hast du z.B. voher
ebx einen Zeiger übergeben, und nun möchtest du, dass der Zeiger woanders hinzeigt.
Z.B.:
Code:
void my_mov( int* src, int* dest )
{
__asm
{
mov eax, src ; Addresse von src nach eax
mov ebx, dest ; Adresse von dest nach ebx
mov [ebx], eax ; dest = src
}
}
|
|
|
12/31/2008, 17:21
|
#3
|
elite*gold: 0
Join Date: Dec 2008
Posts: 14
Received Thanks: 2
|
ahhhh!! ^^
ich glaub ich habs verstanden
d.h.
in deinem beispiel mit
mov [ebx], eax
schreibst du gar nich in ebx selber sondern in die adresse auf die ebx zeigt, oder?
wenn also ebx und eax pointer sind und auf irgendetwas zeigen, würde nach
mov [ebx], eax
ebx also ein zeiger auf einen zeiger sein? nämlich zeigt ebx auf eax, und eax ja wiederum irgendwohin?
sag bitte einfach ja, dann hätte ich es kapiert
|
|
|
01/03/2009, 04:17
|
#4
|
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 454
|
EBX enthält eine Adresse, die für eine Speicherzelle steht, also zunächst ein simpler DWORD-Wert, und, wenn du nun EBX in eckige Klammern einschließt, heißt das, dass der Speicher an dieser Adresse betroffen ist.
Ob nun hineingeschrieben oder ausgelesen wird.
Wie viele Bytes nun effektiv betroffen sind, kannst du noch mit Größenspezifizierern definieren.
Kleines Beispiel:
Code:
mov eax, 400688 ;ganz normaler, absoluter Ganzzahlenwert
mov eax, [400688] ;Nun stellt dieser Wert eine Adresse dar und es werden 4 Bytes ab da an aus dem Speicher gelesen
Hier genau das Gleiche:
Code:
xor eax, eax
mov ebx, 400688
mov ebx, eax ;Der Wert von EAX wird in EBX geschrieben - Der vorhergehende Wert von EBX ist unerheblich
mov [ebx], eax ;Der Wert von EBX, also 400688, stellt eine Adresse des Speichers dar und in die so spezifizierte(n) Speicherzelle(n) wird der Wert von EAX geschrieben
|
|
|
01/03/2009, 16:04
|
#5
|
elite*gold: 0
Join Date: Dec 2008
Posts: 14
Received Thanks: 2
|
yo thx, also isses doch so wie ich meinte, die [] nutzt man genauso wie auch in anderen sprachen in der pointerarithmetik zum "dereferenzieren", um mit den werten zu arbeiten die an der angegebenen speicheradresse stehn.
da is übrigens nen kleinen schönheitsfehler in deinem codebeispiel ^^
xor eax, eax ; eax = 0
mov ebx, 400688 ; ebx = 400688
mov ebx, eax ; ebx = 0
mov [ebx], eax ;Der Wert von EBX, also 400688....
der wert von ebx ist 0 :P
|
|
|
All times are GMT +1. The time now is 03:22.
|
|