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

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

Глен Бек и Бетти Снайдер за работой на 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). Каждый урок начиная с этого момента напрямую учит этому набору инструкций.