Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Kyoko12 am 17. November 2004, 16:26

Titel: C++-Inline-Assambly
Beitrag von: Kyoko12 am 17. November 2004, 16:26
Hi, ich hättre mal ne Frage.

Mein Probrem:

Ich beispielsweise in C++ eine Variable definieren die a heist und sagen wir mal den Wert 5 hat.
Jetzt möchte ich den asm Befehl von C++ so einsetze ndas ich die Variable einsetzten kann.
z. B.:
mov si, a
so das a meine C++ Variable ist. Wie geht das denn?
Das Bona Fide Tutorial dazu versteh ich nähmlich nicht.

Cu.
Titel: C++-Inline-Assambly
Beitrag von: caga am 17. November 2004, 18:32
hi,
also zunächst muss man erfahren welchen compiler du benutzt (gcc, oder sonstwas)
Titel: C++-Inline-Assambly
Beitrag von: stultus am 17. November 2004, 20:21
wie es genau geht weiß ich nich, ich gehe aber davon aus dass du vor sämtliche variablen nen _ schreiben darfst (also "_a" statt "a"), zumindenst ist dies der fall wenn man den code mit reinlinkt. (is ganz einfach um Doppelte Variablen u. ä. zu vermeiden, passiert ja oft sowas ^^ für Labels und Co gilt das übrigens auch...)
Titel: C++-Inline-Assambly
Beitrag von: zacK am 18. November 2004, 08:58
hehe

das geht nich einfach so mit "_".

also der gcc braucht da die AT & T Syntax.

das sieh dan in etwa so aus:

asm volatile ("movw %%ax, %%si" : "" : "a"(a) );


erstens musst du
mov ziehl, quelle
in
mov quelle, ziehl umwandeln.
dann musst du auch noch sagen wieviel byte du operieren willst
also movw für word, movb für byte etc...
%%ax = bedeutet das es ein register ist
"a"(a) = bedeutet das es die variable a in eax mecht...


hoffe das stimmt mal soweit... :D

PS: Es giebt auch noch andere varianten das zu coden (auch mit inline asm)
Titel: C++-Inline-Assambly
Beitrag von: Kyoko12 am 20. November 2004, 12:16
Danke, ich kaspiers zwar nochnicht ganz, aber schon besser als vorher.
Ich verwend Dev.C++ unter Windows XP.