Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - Compiler & IDEs ::  Inline Assembler in GCC  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
hackbert
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
Beitrag hackbert Mitglied 13:10:00 22.03.2003   Titel:   Inline Assembler in GCC            Zitieren

Ich hatte angefangen in eine C-Source inline assembler nach der mir bekannten Syntax einzubinden:
Code:
char message[] = "Hallo wie geht es?";
_asm{
     mov si, message
}
Code:
char message[] = "Hallo wie geht es?";
_asm{
mov si, message
}
Code:
char message[] = "Hallo wie geht es?";
_asm{
     mov si, message
}

GCC meckert und nach einem Blick in die FAQ sah ich, dass man das so machen muss:
Code:
char message[] = "Hallo wie geht es?";
asm("mov si, message");
Code:
char message[] = "Hallo wie geht es?";
asm("mov si, message");
Code:
char message[] = "Hallo wie geht es?";
asm("mov si, message");

Jetzt meckert er nicht mehr über die Syntax, sagt aber folgendes:
Error: too many memory references for 'mov'

Was soll denn das heißen?

_________________
http://www.programmierforen.de | KernelWiki
Werbeunterbrechung
rüdiger
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2001
Beiträge: 22822
Beitrag rüdiger Moderator 14:10:00 22.03.2003   Titel:              Zitieren

der GCC nutzt einen anderen Assembler Syntax, als der MSVC++. Der MSVC++ nutzt Intel-Syntax Assembler und der GCC nutzt den (IMHO besseren) AT&T Syntax. In der 3er Version kann man das aber mit einem Parameter ändern, weiss aber nicht genau wie (schau am besten mal in die GCC Doku)

_________________
.
Descartes
Unregistrierter




Beitrag Descartes Unregistrierter 14:11:00 22.03.2003   Titel:              Zitieren

Bei GCC sieht die Syntax noch ein bisserl anders aus.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main()
{
  char message[] = "Hallo wie geht es?";

  asm("movl %0, %%esi;"::"r"(message));

  return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main()
{
char message[] = "Hallo wie geht es?";

asm("movl %0, %%esi;"::"r"(message));

return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main()
{
  char message[] = "Hallo wie geht es?";

  asm("movl %0, %%esi;"::"r"(message));

  return 0;
}
hackbert
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
Beitrag hackbert Mitglied 14:55:00 22.03.2003   Titel:              Zitieren

gibt es zu diesem Syntax irgendwo Doku?

_________________
http://www.programmierforen.de | KernelWiki
Descartes
Unregistrierter




Beitrag Descartes Unregistrierter 15:19:00 22.03.2003   Titel:              Zitieren

Zitat:
Original erstellt von hackbert:
gibt es zu diesem Syntax irgendwo Doku?


Die ersten beiden Links beschreiben zwar primär wie man mit dem GCC inline Assember für einen Atmel AVR Prozessor schreibt, aber die Syntax und Semantik wie man beim GCC inline Assembler in C oder C++ Quellcode schreibt ist ja auch für andere Prozessoren (z.B. Intel, PowerPC oder SPARC) gültig. Lediglich die zur Verfügung stehenden Mnemonics und Register unterscheiden sich.

Inline Asm http://savannah.nongnu.org/download/avr-libc/doc/avr-libc-user-manual/inline_asm.html

GCC-AVR Inline Assembler Cookbook http://www.egnite.de/ethernut/GCCAVRInlAsmCB.pdf

Brennan's Guide to Inline Assembly http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html

Introduction to GCC Inline Asm http://la.kmv.ru/rmiyagi-inline-asm.txt

Linux Assembly HOWTO :: GCC Inline Assembly http://www.tldp.org/HOWTO/Assembly-HOWTO/gcc.html

Inline assembly for x86 in Linux http://www-106.ibm.com/developerworks/library/l-ia.html

Using Inline Assembly With gcc http://www.cs.virginia.edu/~clc5q/gcc-inline-asm.pdf

Linux Assembly : resources http://la.kmv.ru/resources.html
hackbert
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
Beitrag hackbert Mitglied 15:26:00 22.03.2003   Titel:              Zitieren

Vielen Dank!

_________________
http://www.programmierforen.de | KernelWiki
hackbert
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
Beitrag hackbert Mitglied 19:54:00 22.03.2003   Titel:              Zitieren

Ich habe jetzt den Parameter für GCC gefunden, der Intel Syntax im Quellcode erlaubt. Allerdings kommen jetzt ganz viele Fehler. Mein Programm sieht so aus:
C/C++ Code:
main()
{
    char message[] = "Second stage booting";
    asm("mov eax, 0x00000000");
       
}
C/C++ Code:
main()
{
char message[] = "Second stage booting";
asm("mov eax, 0x00000000");

}
C/C++ Code:
main()
{
    char message[] = "Second stage booting";
    asm("mov eax, 0x00000000");
       
}

Es kommen 26 Fehler bei der kompilierung (gcc -c testkernel.c -masm=intel) die ich hier jetzt nicht alle auflisten möchte. Sie wiederholen sich ziemlich oft:

Too many memory references for mov
Too many memory references for sub
junk 'PTR [ebp-x]' after expression, wobei x für mehrere Zahlen stehen kann...

_________________
http://www.programmierforen.de | KernelWiki
Mr. N
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.12.2001
Beiträge: 4331
Beitrag Mr. N Mitglied 20:33:00 22.03.2003   Titel:              Zitieren

wie heißt der parameter? wär doch bestimmt was für die faq.
hackbert
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
Beitrag hackbert Mitglied 20:36:00 22.03.2003   Titel:              Zitieren

Der Parameter heißt -masm=intel wahlweise auch -mintel-syntax
trotzdem funktioniert mein proggie net :(

_________________
http://www.programmierforen.de | KernelWiki
Mr. N
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.12.2001
Beiträge: 4331
Beitrag Mr. N Mitglied 20:55:00 22.03.2003   Titel:              Zitieren

versuchs doch mal mit 0 statt 0x0000000....
C/C++ Forum :: FAQ - Compiler & IDEs ::  Inline Assembler in GCC  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.