Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Assembler » Assembler-code einfügen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
30.10.2004, 17:14 Uhr
RedEagle



Hi
Ich hoffe, dass das, das richtige Forum ist.

ich möchte Assembler-code in mein Cpp-Programm einfügen (DEV-CPP), doch irgendwie geht das nicht:

C++:
int main()
{
__asm
{
   start:        //; The CODE entry point to the program
    call main    //; branch to the "main" procedure
    exit
     //;«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
     main proc
       print chr$("Hi, I am in the 'main' procedure",13,10)
       ret       //; return to the next instruction after "call"
     main endp
     //;«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
  end start      //; the program ends
}
return 0;
}


--
MFG RedEagle

Dieser Post wurde am 30.10.2004 um 17:15 Uhr von RedEagle editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.10.2004, 17:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du definierst 2x main


C++:
int main()
{
__asm
  {
      print chr$("Hi, I am in the 'main' procedure",13,10)
  }
return 0;
}


--
class God : public ChuckNorris { };

Dieser Post wurde am 30.10.2004 um 17:19 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.10.2004, 17:23 Uhr
RedEagle




C++:
int main()
{

  __asm //hier ist ein Fehler
  {
      print chr$("Hi, I am in the 'main' procedure",13,10)
  }

return 0;
}



ergibt

Fehler:

5 D:\asm in cpp.cpp
parse error before `{' token


--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.10.2004, 21:16 Uhr
(un)wissender
Niveauwart


Schau dir mal asm und gcc an (google).
Denn Dev-Cpp nutzt Mingw32 und der basiert auf gcc, und der wiederum kann nur Asm in AT&T-Syntax und in eigenbauweise.
Irgendwo im Asmforum ist dazu was du brauchst.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.10.2004, 22:17 Uhr
RedEagle




AT&T-Syntax:

asm ( assembler template
      : output operands       (optional)
      : input operands        (optional)
      : list of clobbered registers       (optional)
      );  



naja, sieht ja nicht sehr übersichtlich aus, gibt's nichts besseres??
(Quelle: www.106.ibm.com/developerworks/linux/library/l-ia.html )
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.10.2004, 22:26 Uhr
RedEagle



so, jetzt habe ich als Beispiel volgendes:

C++:
#include <stdio.h>
int main()
{
int foo=10,bar=15;

//asm
__asm__ __volatile__ (  "addl %%ebxx,%%eax"
                       : "=eax"(foo) // ouput
                       : "eax"(foo), "ebx"(bar)// input
                       : "eax" // modify
                      );
//!asm

printf("foo+bar=%d\n", foo);

return 0;
} //Hier wird der Fehler angezeigt



Der fehler:

14 D: \asm in cpp.cpp
Internal compiler error in instantiate_virtual_regs_1, at

--
MFG RedEagle

Dieser Post wurde am 30.10.2004 um 22:36 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.10.2004, 22:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


muss es nicht %0,%1 heißen?

ich krieg bei obigen code "Illegal Constraint"
--
class God : public ChuckNorris { };

Dieser Post wurde am 30.10.2004 um 22:52 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.10.2004, 23:02 Uhr
~RedEagle als Gast
Gast



C++:
__asm__ __volatile__ (  "addl %0,%1" /*%%ebxx,%%eax*/


Geht auch nicht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.10.2004, 23:11 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


seltsam, dashier kompiliert, aber es kommt 20 raus, nicht 25?


C++:
#include <stdio.h>
int main()
{
  int foo=10,bar=15;

  //asm
  __asm__ (  "addl %0, %1"
    : "=a"(foo)
    : "a"(foo), "b"(bar)
    );
  //!asm

  printf("foo+bar=%d\n", foo); // ergibt 20

  return 0;
}



statt eax muss man "a" schreiben, statt ebx "b", usw

www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.10.2004, 23:29 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wahnsinn, so gehts:


C++:
#include <stdio.h>
int main()
{
  int foo=10,bar=15;

  //asm
  __asm__ ("addl %0, %1"
    : "=a"(foo),"=b"(foo)
    : "a"(foo), "b"(bar) );
  //!asm

  printf("foo+bar=%d\n", foo);

  return 0;
}



Nun kommt tatsächlich 25 raus
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Assembler ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: