У чому різниця між Асемблером та Компілятором

>Зараз так не роблять

Зараз зазвичай транслюють код в асемблер віртуальної машини, а потім цю проміжну форму машинний код конкретної платформи (GCC, LLVM).

> Зараз зазвичай транслюють код в асемблер віртуальної машини, а потім цю проміжну форму машинний код конкретної платформи (GCC, LLVM).

MiiNiPaa: gcc якраз використовує справжнісінький асемблер і викликає gas щоб його асемблювати.

В іншому випадку довелося б робити × трансляторів, замість поточного × .

Транслювання з подання в асемблер, а потім складання це для прискорення розробки транслятора під нову платформу: можна взяти готовий асемблер і не городити велосипедів.

> Проміжне уявлення таки використовується

MiiNiPaa: використовується, і gimple, і rtl, але вони нікуди не виводяться при нормальній роботі і існують тільки всередині компілятора, що виконується. Результат роботи власне компілятора c/c++ з gcc (cc1/cc1plus) - це асемблерний файл для цільової машини.

> В іншому випадку довелося б робити × трансляторів, замість поточного × .

У вас ліворуч і праворуч від "замість" записано однакове значення.

jcmvbkbc: >У вас ліворуч і праворуч від "замість" записано однакове значення.

Дякую. Плюсик праворуч прибитий на один цвях і випадково повернувся на 45 градусів.

Так, до проміжної вистави, без явної вказівки команд компілятору, не дістатися. Я просто зрозумів попередній пост як "GCC не використовує проміжне уявлення".

Мова програмування типу - асемблер (assembly language).

(compiler) тобто програма, що перетворює оператори (високрівневої) мови на машинні коди. Подібноасемблеру, компілятор символ за символом зчитує файл з вихідною програмою, поділяючи його на слова, оператори та числа. Написати компілятор, зрозуміло, набагато складніше, ніж асемблер. Оператор асемблера перекладається єдиний машинний код, тоді як оператор мови високого рівня, зазвичай, перетворюється на безліч машинних команд.

"Код. Таємна мова інформатики" Чарльз Петцольд.

Раніше було кілька виробників процесорів для комп'ютерів. Внаслідок чого у кожного виробника був свій асемблер. У лінійці Intel він свій, у моторолу та ін, був свій. Зараз начебто все стандартизовано.

Раніше було кілька виробників процесорів для комп'ютерів. Зараз начебто все стандартизовано. І раніше і зараз. як було - так і є: різні виробники, різні процесори, та різні асемблери. Що пікантно, що для Intel x86 і Intel X86_64 (насправді AMD64) - асемблери різні.

І більше того: для одного і того ж процесора (кожного!) є кілька асемблерів, як мінімум, в AT&T і Intel нотаціях, що не мають нічого спільного. + ще з варіантами FASM, NASM, GCC і т.д.

Декілька асемблерів для одного?! Що ж. Здавалося б логічним вже стандартизувати хоча б у лінійках виробників, а ні, як виявилося.

Виходить, - дивовижне "бажання" виробників ускладнити життя програмістам, що працюють з різними платформами, особливо використовують асемблер не так часто (вузькі місця)