at&t inline asm
-
huhu ich versuche gerade die rot13 chiffrierung in inline assembler zu machen
ich bin mir auch sicher das es richtig ist allerdings bringt er einen seg fault,
könnt ihr mir bitte helfen#include <stdio.h> int main (int argc,char **argv) { char text = 'm'; char translated; asm ( "movl 1, %%eax\n\t" "add 13, %%eax\n\t" "mov %%eax,2\n\t" :"=r"(translated) :"r"(text) :"%eax" ); printf("%c <--> %s\n",text,translated); return 0; }
beim compilieren bringt er keine warning
danke viele lieben grüße Jörg
-
[c]printf("%c <--> %s\n",text,translated);[/c]
*hust*
Tipp: Aktiviere beim kompilieren bitte immer extra Warnungen, die helfen dir solche Fehler zu sehen (GCC Flags: -Wall -W -pedantic -std=c99)
-
AT&T asm-syntax ist so ziemlich das übelste was es gibt. syntaxen dieser art lieben zwar geistesgestörte linux-entwickler, aber ich würde dir raten, einen compiler zu nehmen, der richtiges inline-asm (intel-syntax) beherrscht oder den assembler code mit z.b. 'nasm' zu compilieren (als object-datei oder lib) und dann beim linken mit einbinden...
-
gabs da nicht ein -masm=intel (wie alle -m Parameter natürlich Maschinenspezifisch)
-
Helium schrieb:
gabs da nicht ein -masm=intel (wie alle -m Parameter natürlich Maschinenspezifisch)
jo
@pale dog
ist doch nett die Syntax :p
-
huhu
das mit dem %s im printf ist mir schon aufgefallen
er macht auch keine fehler wenn ich printf auskommentiere der witz ist wenn ich translated ausgeben will kommt der se fault aber ich werde mal nach optionen für den gcc schauen damit ich x86 asm koden kanndanke an euch alle