Autor Thema: C++-Inline-Assambly  (Gelesen 6070 mal)

Kyoko12

  • Beiträge: 59
    • Profil anzeigen
Gespeichert
« 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.

caga

  • Beiträge: 22
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 17. November 2004, 18:32 »
hi,
also zunächst muss man erfahren welchen compiler du benutzt (gcc, oder sonstwas)

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #2 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...)
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #3 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)

Kyoko12

  • Beiträge: 59
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 20. November 2004, 12:16 »
Danke, ich kaspiers zwar nochnicht ganz, aber schon besser als vorher.
Ich verwend Dev.C++ unter Windows XP.

 

Einloggen