Современные CPU

Discussion in 'WASM.BEGINNERS' started by mr.en3mY, Aug 26, 2017.

  1. Minzdrav

    Minzdrav Well-Known Member

    Blog Posts:
    0
    Садко и все.
    А почему GAS такой древний асм и так крепко
    держится? Не рассыпается в прах как другие?
    Это же бывший AS, один из первых ходовых
    ассемблеров. В нём должно всё устареть.

    Под Линуксы-БСД вроде же на Си пишут традиционно?
     
  2. SadKo

    SadKo Владимир Садовников

    Blog Posts:
    8
    Потому что GAS - неотъемлемая часть GCC: прежде всего, ассемблерные вставки напрямую подставляются в ассемблерный файл, который генерирует GCC. А потом это всё, как раз, скармливается GAS.
    То есть, опять же, GCC скорее больше транслятор нежели компилятор: в одной из стадий компиляции он транслирует исходник на Си или Си++ в ассемблерный файл. Проверить это можете, передав опцию -S компилятору. На выходе получите вполне себе ассемблерный файл.
    Ну и, опять же, GCC используется для сборки ядра Linux. Разумеется, если там не будет продвинутого встроенного ассемблера, ядро особо не попишешь.
     
  3. Minzdrav

    Minzdrav Well-Known Member

    Blog Posts:
    0
    СадКо и все.

    Очень интересно, Садко!
    Я так понимаю что Си не транслируется в ассемблер,
    как раньше, а на прямую в машинный код? Ну я так читал
    что мол по началу Си транслировался в ассемблер, а потом
    сделали напрямую. Или на Линксе транслируется в асм, сначала,
    а потом в код?
    ГАС разве продвинутый? Говорят же что страшный динозавр,
    без малейшего облегчения жизни, кодеру? :)
    А где ГАС используют, кроме Линукс и БСД ядра?

    Ты знаешь, по ГАСу очень мало информации, в сети, а вещь
    явно интересная.
     
  4. yashechka

    yashechka Ростовский фанат Нарвахи

    Blog Posts:
    90
    Всё же транслируется в машинный код, если это не виртуальная машина!!!
     
  5. SadKo

    SadKo Владимир Садовников

    Blog Posts:
    8
    Это зависит от конкретного компилятора. Но зачастую в компиляторах стадия кодогенерации осуществляется после стадии перевода в псевдокод.
    Это особенно удобно, когда производитель предоставляет не конкретный компилятор, а набор (коллекцию) компиляторов для разных языков.
    Например, clang сначала генерирует код для LLVM, и только после этого вы можете получить нативный код.
    GCC генерирует ассемблерный код, а затем скармливает его GAS. Да что GCC. Тот же Watcom в своё время генерировал псевдокод, и только на финальной
    стадии выдавал уже объектник.
    Множество синтаксически различных языков всегда проще подвести под какую-то общую базу, и только после этого заниматься кодогенерацией.
    Так гибче, так проще.

    А почему нет?
    - Поддерживает БОЛЬШИНСТВО различных архитектур: x86, x86_64, ARM, Alpha, PPC, MIPS, AVR и т.д.
    - Своевременно поддерживает все инструкции, доступные для каждой поддерживаемой архитектуры.

    Недостаток только в AT&T-синтаксисе (который, кстати, при желании можно сменить на интеловский), который большинство кодеров, пришедших с венды или из доса, не могут сходу переварить.

    GLIBC же, навскидку.
    Встроенный в GCC ассемблерный код напрямую передаётся GAS как он есть (после стадии обработки компилятором).

    Ничего подобного, информации достаточно. Вот мануал https://sourceware.org/binutils/docs/as/
     
  6. mr.en3mY

    mr.en3mY New Member

    Blog Posts:
    0
    А если я пишу под Win зачем мне другие сборщики? Точнее в каких случаях они мне могут пригодится?
     
  7. yashechka

    yashechka Ростовский фанат Нарвахи

    Blog Posts:
    90
    У каждого свои фишки, у Фасм есть то, что нет у Масма и наоборот, всё это дело вкуса.
     
    Mikl___ likes this.
  8. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    yashechka,

    У васма фишка особая - неадекват модер и даже админ не знает что с этим делать :sarcastic:
     
  9. yashechka

    yashechka Ростовский фанат Нарвахи

    Blog Posts:
    90
    Поправил.