| Autor |
Nachricht |
hackbert
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
|
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
|
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
|
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
|
hackbert Mitglied
14:55:00 22.03.2003 Titel: |
|
Zitieren |
|
 |
Descartes
Unregistrierter
|
Descartes Unregistrierter
15:19:00 22.03.2003 Titel: |
|
Zitieren |
|
 |
hackbert
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
|
hackbert Mitglied
15:26:00 22.03.2003 Titel: |
|
Zitieren |
|
 |
hackbert
Mitglied
Benutzerprofil
Anmeldungsdatum: 03.11.2001
Beiträge: 723
|
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
|
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
|
hackbert Mitglied
20:36:00 22.03.2003 Titel: |
|
Zitieren |
|
 |
Mr. N
Mitglied
Benutzerprofil
Anmeldungsdatum: 28.12.2001
Beiträge: 4331
|
Mr. N Mitglied
20:55:00 22.03.2003 Titel: |
|
Zitieren |
versuchs doch mal mit 0 statt 0x0000000.... |
|
|
|
 |