Що таке асемблер?

Що таке асемблер?

Глен Бек і Бетті Снайдер працюють на ENIAC у Балістичній дослідницькій лабораторії.
Глен Бек і Бетті Снайдер працюють на ENIAC у Балістичній дослідницькій лабораторії.

ENIAC був першим електронним комп'ютером загального призначення. Його побудували в Пенсильванському університеті та завершили 1945 року. Снайдер була однією з шести жінок, які програмували його вручну.

До появи таких машин, як ENIAC, слово «комп'ютер» означало людину, яка виконувала обчислення вручну, і шість жінок, які програмували ENIAC, були найняті саме для цієї роботи. Щоб запрограмувати машину, вони перекомутовували її: під'єднували кабелі та встановлювали перемикачі щоразу, коли задача змінювалася. Це перекомутовування — історична причина існування мови асемблера. За кілька років інженери в Європі та Америці почали замінювати дроти й налаштування перемикачів короткими записаними кодами, що позначали інструкції, тож людина могла читати й змінювати програму, не торкаючись роз'єму.

По-перше, CPU (центральний процесор) — це чип у центрі вашого комп'ютера, і він виконує одну роботу: він виконує довгий список невеликих команд, які називаються інструкціями, одну за одною, мільярди за секунду. Кожна інструкція сама по собі проста, наприклад додавання двох чисел, переміщення значення або перехід в інше місце.

Асемблер — це форма інструкцій, які виконує CPU, доступна для читання людиною. Кожен рядок — це (майже) одна машинна інструкція. Тут немає циклів, об'єктів чи рядків. Ви переміщуєте числа між регістрами, невеликими комірками зберігання всередині процесора, та пам'яттю.

Моріс Вілкс оглядає частину EDSAC у Кембриджському університеті.
Моріс Вілкс оглядає частину EDSAC у Кембриджському університеті.

EDSAC виконував Initial Orders Девіда Вілера — одну з перших програм, які перекладали записані інструкції в машинний код.

Кожен процесор потребує програми, яка читає записані інструкції та створює необроблені біти, які виконує апаратне забезпечення: асемблера. Асемблер на цій сторінці націлений на один набір інструкцій.

Цей симулятор використовує RISC-V — сучасний набір інструкцій, який застосовують у справжніх чипах і викладають в університетах. Те, що ви тут вивчите, безпосередньо застосовується до апаратного забезпечення.

Юнсуп Лі тримає ранній прототип чипа RISC-V у 2013 році.
Юнсуп Лі тримає ранній прототип чипа RISC-V у 2013 році.

RISC-V — це відкрита архітектура набору інструкцій. Будь-хто може реалізувати її опубліковану специфікацію в апаратному забезпеченні, і жодної плати чи дозволу не потрібно.

Будь-який проєкт набору інструкцій має вирішити, скільки роботи виконує одна інструкція. Чипи CISC (Complex Instruction Set Computer), зокрема архітектура x86, наявна в більшості настільних і портативних комп'ютерів, вкладають великий обсяг роботи в кожну інструкцію. Одна інструкція може прочитати значення з пам'яті, виконати над ним арифметику та зберегти результат назад — усе за один крок. RISC-V дотримується проєкту, обґрунтованого в роботі Patterson & Ditzel, 1980: кожна інструкція виконує одну просту операцію, а будь-яка складна поведінка утворюється поєднанням багатьох таких інструкцій.

RISC розшифровується як Reduced Instruction Set Computer (комп'ютер зі скороченим набором інструкцій). Апаратне забезпечення побудоване так, щоб із високою швидкістю виконувати невелику групу простих інструкцій. Складна поведінка утворюється поєднанням цих простих, швидких кроків.

Асемблер Кетлін Бут для ARC (Booth, 1947) та Initial Orders Девіда Вілера для EDSAC (Wilkes, Wheeler & Gill, 1951) належать до найраніших робочих асемблерів, і історики досі сперечаються, який із них з'явився першим. RISC-V — набір інструкцій, який виконує цей симулятор, — визначає невеликий відкритий список інструкцій, який може реалізувати будь-хто (Asanović & Patterson, 2014). Кожен урок із цього моменту навчає безпосередньо цього набору інструкцій.