Seite 1 von 2
ASM Fragen
Verfasst: 26.09.2005 15:58
von al90
Hi,
Hab da mal ein paar fragen zu ASM. Wie kann man eigentlich Bytes
aus einem Memorybereich lesen & schreiben ? (Peek+Poke)
Habe schon alles mögliche probiert, aber irgendwie bekomme ich
es nicht hin. Lediglich zugriff auf variablen-inhalte ging, aber damit
allein komme ich für mein vorhaben nicht weiter.
Ausserdem würde mich mal interessieren ob es irgendwelche Tuts gibt.
(wenn möglich in deutsch) Das von purebasic.com (asm.hlp) habe ich
bereits. Aber ich suche etwas für einsteiger z.b. mit code beispielen u.s.w.
Meine erfahrung beruht auf 68000er ASM, aber auf'm PC scheints
doch etwas komplizierter zu sein. Bin für jeden tip dankbar.

Re: ASM Fragen
Verfasst: 27.09.2005 13:48
von Eric
al90 hat geschrieben:Wie kann man eigentlich Bytes
aus einem Memorybereich lesen & schreiben ? (Peek+Poke)
Habe schon alles mögliche probiert, aber irgendwie bekomme ich
es nicht hin. Lediglich zugriff auf variablen-inhalte ging, aber damit
allein komme ich für mein vorhaben nicht weiter.
Falls du für den x86 im Protected Mode programmierst, dann nimm den mov Befehl:
Code: Alles auswählen
mov Ziel,Quelle
mov eax,[Adresse]
mov dword [Adresse],eax
mov ebx,[eax*5]
Falls du 16bit Programme schreibst:
Code: Alles auswählen
mov Ziel,Quelle
mov ax,ds:[Adresse]
mov word ds:[Adresse],ax
mov bx,ds:[ax*5]
al90 hat geschrieben:
Ausserdem würde mich mal interessieren ob es irgendwelche Tuts gibt.
(wenn möglich in deutsch) Das von purebasic.com (asm.hlp) habe ich
bereits. Aber ich suche etwas für einsteiger z.b. mit code beispielen u.s.w.
Es gibt z.B. auf
Robsite.de einige Tutorials.
Aber ich glaubs, dass dieses Thema besser unter "Andere Sprachen" aufgehoben ist.
Verfasst: 28.09.2005 03:05
von al90
ok werde mal sehen ob ich damit weiterkomme.
Mein gestriger versuch ist jedenfals kläglisch gescheitert.
Wenns nicht klappen sollte, muss ich halt auf ASM verzichten.
Trotzdem danke für die antwort.

Verfasst: 28.09.2005 14:17
von MLK
da al90 fertig hat, nutze ich mal die gelegenheit meine asm fragen loszuwerden.
was macht LEA genau. load effective adress - ok, aber was ist damit gemeint und wann braucht man es? ich würde gerne ein verständliches beispiel sehen.
innerhalb von prozeduren kann man nicht per [v_var] auf eine lokale variable zugreifen sondern nur per [esp + pos] diese position herauszufinden ist unglaublich umständlich, zumal sie sich auch noch bei jedem push/pop verändert. gibt es eine möglichkeit die position herausfinden zu lassen?
das "@#Nummer" bei manchen prozeduraufrufen (z.B. CALL Sleep@4) steht für ein sublabel. für das vierte? sublabels = labels innerhalb call_label : return? beispiel?
Verfasst: 28.09.2005 14:42
von AndyX
was LEA macht, hm... Naja zum Beispiel es gibt einen DOS-Interrupt der eine vom Benutzer eingegebene Zeichenkette in einem Buffer speichert. Man muss halt die Adresse des Buffers in DX speichern. Man bekommt so halt glaub ich die Adresse im Speicher.
Verfasst: 28.09.2005 14:56
von Sebe
Wer mal so um die 10 Euro übrig hat: Ich kann euch dieses Buch empfehlen
http://www.amazon.de/exec/obidos/ASIN/3 ... 65-4512061.
In Verbindung mit PureBasic macht das schon viel her

Verfasst: 30.09.2005 00:10
von MLK
hat noch wer antworten auf meine ASM fragen?
Verfasst: 30.09.2005 18:08
von Deeem2031
MLK hat geschrieben:was macht LEA genau. load effective adress - ok, aber was ist damit gemeint und wann braucht man es? ich würde gerne ein verständliches beispiel sehen.
"LEA Eax, [Ecx]" = "MOV Eax, Ecx", in diesem Fall ist es gleich welches du benutzt, LEA hat aber auch einen Vorteil: "LEA Eax, [Ecx*2+1]" ("MOV Eax, Ecx*2+1" funktioniert nicht)
MLK hat geschrieben:innerhalb von prozeduren kann man nicht per [v_var] auf eine lokale variable zugreifen sondern nur per [esp + pos] diese position herauszufinden ist unglaublich umständlich, zumal sie sich auch noch bei jedem push/pop verändert. gibt es eine möglichkeit die position herausfinden zu lassen?
Inline Assembler benutzen? Eine andere Methode gibt es nicht.
MLK hat geschrieben:das "@#Nummer" bei manchen prozeduraufrufen (z.B. CALL Sleep@4) steht für ein sublabel. für das vierte? sublabels = labels innerhalb call_label : return? beispiel?
Sublabel? Das ist einfach nur die Anzahl der benötigten Parameter in Bytes. Sleep@4 braucht also 1 Parameter.
Verfasst: 30.09.2005 18:21
von MVXA
> Sublabel? Das ist einfach nur die Anzahl der benötigten Parameter in Bytes. Sleep@4 braucht also 1 Parameter.
Etwas ausführlicher:
Die 4 beschreibt die Größe des Parameters. Entweder 4 Bytes, 2 Words oder
ein Long.
Verfasst: 30.09.2005 19:02
von hardfalcon
Jetzt wäre es natürlich noch ineressant, wenn man die anzahl der Parameter auslesen könnte...
