compiler



  • Welcher kostenlos, downloadbarer Compiler unterstützt eigentlich die Intel-Syntax und welcher die AT&T?

    Welche Syntax ist derzeit die bessere und kann man beide ohne hardwarebedingungen nutzen?



  • palmE schrieb:

    Welcher kostenlos, downloadbarer Compiler unterstützt eigentlich die Intel-Syntax und welcher die AT&T?

    Welche Syntax ist derzeit die bessere und kann man beide ohne hardwarebedingungen nutzen?

    gcc/g++ => at&t syntax , in neueren verison auch auf intelsyntax umstellbar
    Sonst fallen mir keine compiler mehr ein, die at&t syntax nutzen. (gibts bestimmt noch welche)

    Die bessere syntax ist natürlich at&t syntax 😛



  • TGGC|_work schrieb:

    Die bessere syntax ist natürlich at&t syntax 😛

    Aha. Finde ich nicht. So ziehmlich alle Turorials und Beispiele sind im Intelsyntax...

    Ich find das nicht sehr praktisch



  • at&t is nur was für weltfremde linuxnerds. alle profis benutzen die weltweit verbreitete intelsyntax.



  • geschenke schrieb:

    at&t is nur was für weltfremde linuxnerds. alle profis benutzen die weltweit verbreitete intelsyntax.

    *vervollständige* Intelsyntax wird hauptsächlich im windowsbereich verwendet (auf x86). Auf anderen Plattformen nutzt man AFAIK at&t syntax. (Wobei da wohl auch ein anderer Befehlssatz zum einsatz kommt).

    Im Endeffekt sollte man beide syntaxen beherrschen. Kann NIE schaden. Im gegenteil.

    man beachte auch wie portabel gcc ( GAS ) ist udn auf wie vielen Plattformen des vorhanden ist!



  • Ich kann aber auch auf windows die AT&T-Syntax verwenden?

    Ab welcher version kann man es denn auf intel umstellen und wie?



  • palmE schrieb:

    Ich kann aber auch auf windows die AT&T-Syntax verwenden?

    Ab welcher version kann man es denn auf intel umstellen und wie?

    Natürlich kannste auf windows auch at&t verwenden!
    Du musst nur GAS ( GNU ASSEMBLER ) besitzen. Dieser ist beim gcc dabei.

    Wenn du nun in einem C/C++ programm inline assembly verwenden willst und gcc/g++ nutzt, dann kannste folgendermaßen in intelyntax umschalten:

    int main()
    {
      /* dein code */
    
       asm(".intel_syntax noprefix   \n"); // <== schaltet auf intelsyntax
       asm("  \n");  <=== deinn asm code
       asm(".att_syntax prefix\n");    // schaltet wieder auf at&t syntax...das muss sien, da sonst es fehlöermeldungen nur so regnet, denn gcc wandelt den C code in at&t assembly code um... => konflikt  
    
      // oder:
    
      asm(
      ".intel_syntax noprefix\n"
      "    \n"   // <=== dein code
      ".att_syntax\n"
    );
    
      /* dein code*/
       return 0;
    }
    

  • Mod

    TGGC|_work schrieb:

    man beachte auch wie portabel gcc ( GAS ) ist udn auf wie vielen Plattformen des vorhanden ist!

    gcc und gas mögen auf vielen platformen verfügbar sein, will ich inline assembler einsetzen, so ist das eher uninteressant. denn dann lege ich mich sowieso auf eine bestimmte prozessorfamilie fest.

    palmE schrieb:

    Welche Syntax ist derzeit die bessere und kann man beide ohne hardwarebedingungen nutzen?

    "derzeit" ist etwas deplaziert, denn echte entwicklung gibt es hier ja eigentlich nicht. und keine syntax ist besser als die andere in dem sinne, dass sich plötzlich mehr möglichkeiten auftäten. die intelsyntax ist weniger kryptisch und weitestgehend widerspruchsfrei. bei der at&t syntax bestehen ja einige bugs für bestimmte befehle mit 3 operanden, in denen die reihenfolge vertauscht ist.



  • camper schrieb:

    TGGC|_work schrieb:

    man beachte auch wie portabel gcc ( GAS ) ist udn auf wie vielen Plattformen des vorhanden ist!

    gcc und gas mögen auf vielen platformen verfügbar sein, will ich inline assembler einsetzen, so ist das eher uninteressant. denn dann lege ich mich sowieso auf eine bestimmte prozessorfamilie fest.

    palmE schrieb:

    Welche Syntax ist derzeit die bessere und kann man beide ohne hardwarebedingungen nutzen?

    "derzeit" ist etwas deplaziert, denn echte entwicklung gibt es hier ja eigentlich nicht. und keine syntax ist besser als die andere in dem sinne, dass sich plötzlich mehr möglichkeiten auftäten. die intelsyntax ist weniger kryptisch und weitestgehend widerspruchsfrei. bei der at&t syntax bestehen ja einige bugs für bestimmte befehle mit 3 operanden, in denen die reihenfolge vertauscht ist.

    Es schadet ja nicht wenn der von ienem benutze assembelr auf verschiedenen plattformen verfügbar ist.

    "kryptisch" ist relafif. Wer zuerst at&t syntax glernt hat udn danch intelsyntax, wird intelsytax wahrscheinlich auch als "kryptisch" empfinden.

    Was die Operandenreihenfolge angeht finde ich

    QUELLE , ZIEL

    logischer als

    ZIEL , QUELLE

    at&t ist deswgeen FÜR MICH die "BESSERE" syntax.

    aber wie gesagt:
    Am ebsten beide syntaxen lernen und dann so coden wie es einem am besten gefällt.


  • Mod

    TGGC|_work schrieb:

    "kryptisch" ist relafif. Wer zuerst at&t syntax glernt hat udn danch intelsyntax, wird intelsytax wahrscheinlich auch als "kryptisch" empfinden.

    Was die Operandenreihenfolge angeht finde ich

    QUELLE , ZIEL

    logischer als

    ZIEL , QUELLE

    at&t ist deswgeen FÜR MICH die "BESSERE" syntax.

    aber wie gesagt:
    Am ebsten beide syntaxen lernen und dann so coden wie es einem am besten gefällt.

    also in allen mir bekannten programmiersprachen (zugegeben, das nicht nun auch nicht so furtchbar viele) ist ja nun so, das in ein ausdruck oder statement, das eine variable verändert, die veränderte variable für gewöhnlich links steht. vor allem auch, weil ja - im wesentlichen abgesehen von mov-befehlen - der zieloperand auch eingangsoperand ist.
    in C oder C++ schreibe ich
    a = b
    a &= b
    a += b
    in (intel-)assembler schreibe ich ganz analog

    mov a,b
    and a,b
    add a,b

    bei at&t muss ich plötzlich umdenken (und bei 3-operand-befehlern muss ich jedesmal nachschauen 😉



  • camper schrieb:

    TGGC|_work schrieb:

    "kryptisch" ist relafif. Wer zuerst at&t syntax glernt hat udn danch intelsyntax, wird intelsytax wahrscheinlich auch als "kryptisch" empfinden.

    Was die Operandenreihenfolge angeht finde ich

    QUELLE , ZIEL

    logischer als

    ZIEL , QUELLE

    at&t ist deswgeen FÜR MICH die "BESSERE" syntax.

    aber wie gesagt:
    Am ebsten beide syntaxen lernen und dann so coden wie es einem am besten gefällt.

    also in allen mir bekannten programmiersprachen (zugegeben, das nicht nun auch nicht so furtchbar viele) ist ja nun so, das in ein ausdruck oder statement, das eine variable verändert, die veränderte variable für gewöhnlich links steht. vor allem auch, weil ja - im wesentlichen abgesehen von mov-befehlen - der zieloperand auch eingangsoperand ist.
    in C oder C++ schreibe ich
    a = b
    a &= b
    a += b
    in (intel-)assembler schreibe ich ganz analog

    mov a,b
    and a,b
    add a,b

    bei at&t muss ich plötzlich umdenken (und bei 3-operand-befehlern muss ich jedesmal nachschauen 😉

    Jo, is halt Geschmackssache.

    Deswegen sag ich ja auch: beide lernen/ausprobieren...

    ( wenn man von intel auf at&t umsteigt gewöhnt man sich nach ner zeit an die operanden stellung also, "src , dest"... )


Anmelden zum Antworten