ASM Fragen

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

ASM Fragen

Beitrag 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. :wink:
Benutzeravatar
Eric
Beiträge: 303
Registriert: 05.09.2004 09:50
Wohnort: Göttingen

Re: ASM Fragen

Beitrag 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.
El_Choni_work: cant't you just spit the binary data to sqlite, as you would spit a hamster into a microwave oven?
* Fangles falls off the chair laughing
Bild
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

ok werde mal sehen ob ich damit weiterkomme.
Mein gestriger versuch ist jedenfals kläglisch gescheitert. :freak:
Wenns nicht klappen sollte, muss ich halt auf ASM verzichten.
Trotzdem danke für die antwort. :wink:
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag 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?
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag 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.
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

Beitrag 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 :allright:
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

hat noch wer antworten auf meine ASM fragen?
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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.
Bild
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Jetzt wäre es natürlich noch ineressant, wenn man die anzahl der Parameter auslesen könnte... :D
Antworten