Это перевод одной из статей Лин Кларк .
Если вы не читали остальное, рекомендуем начать сначала .
Чтобы понять, как работает WebAssembly, полезно понять, что такое ассемблерный код и как его генерируют компиляторы.
В статье JIT я сравнил взаимодействие с компьютером с взаимодействием с инопланетянином.
Я хочу посмотреть на работу инопланетного мозга – как компьютерный мозг анализирует и понимает сообщения, которые он получает. Часть мозга отвечает за мышление, например, за сложение, вычитание или логические операции.
Есть область, отвечающая за кратковременную память, и еще одна область, отвечающая за долговременную память.
У всех есть имена.
Область мышления — это арифметико-логическое устройство (АЛУ).
Кратковременная память обеспечивается регистрами.
Долговременная память — это оперативное запоминающее устройство (ОЗУ).
Предложения, написанные в машинном коде, называются инструкциями.
Что происходит, когда такая инструкция попадает в мозг? Он разделен на несколько частей, имеющих разное значение.
Разделение инструкций зависит от строения мозга.
Например, мозг на картинке может взять первые шесть чисел и поместить их в арифметико-логическое устройство (АЛУ).
По нулям и единицам АЛУ определяет, что нужно соединить эти части.
Этот фрагмент называется «кодом операции» (кодом операции), поскольку он сообщает АЛУ, какую операцию следует выполнить.
После этого мозг возьмет следующие 2 куска по 3 бита каждый, чтобы определить, какие 2 числа нужно сложить.
Это будут адреса регистров.
Обратите внимание на пояснения над кодом, которые помогут нам, людям, понять, что здесь происходит. Вот что такое ассемблер.
Это называется символическим машинным кодом.
Это способ понять машинный код. Существует прямая связь между ассемблером и машинным кодом.
По этой причине для разных типов машинных архитектур существуют разные типы ассемблеров.
Столкнувшись с новой архитектурой, вам, скорее всего, понадобится новый диалект языка ассемблера.
Оказывается, нам нужно перевести более одного объекта.
Существует не один язык, называемый машинным кодом, а множество различных типов машинного кода.
Как и люди, машины говорят на разных языках.
При переводе с человеческого на инопланетный вы переходите с английского, русского или китайского языка на инопланетный язык А или инопланетный язык Б.
В терминологии программирования это похоже на переход с C, C++ или Rust на x86 или ARM. Допустим, вы хотите иметь возможность переводить любой из этих языков программирования высокого уровня на любой язык ассемблера (который подходит для разных архитектур).
Один из способов сделать это — создать множество переводчиков, способных переводить с любого языка на любой язык ассемблера.
Это будет весьма неэффективно.
Чтобы решить эту проблему, большинство компиляторов добавляют в процесс еще один шаг.
Язык программирования высокого уровня трансформируется в более простой, но по-прежнему не работает на уровне машинного кода.
Это называется промежуточным представлением IR.
Это означает, что компилятор может взять любой язык программирования высокого уровня и перевести его на язык IR. Затем другая часть компилятора может взять язык IR и скомпилировать его во что-то подходящее для целевой архитектуры.
Внешний интерфейс компилятора переводит язык программирования высокого уровня в промежуточное представление.
А бэкенд — это промежуточное представление в ассемблере для целевой архитектуры.
Заключение
Вот что такое ассемблер, и именно так компиляторы переводят языки программирования высокого уровня в языки ассемблера.Мы увидим, как это связано с WebAssembly в следующей статье.
Теги: #программирование #разработка сайтов #фронтенд #фронтенд-разработка #WebAssembly #райффайзенбанк #Ассемблер #Райффайзенбанк #райффайзенбанк #райффайзен
-
Наведите Порядок В Компьютерных Кабелях
19 Oct, 24 -
«Ограничения Помогут Вам Взять Себя В Руки»
19 Oct, 24 -
Глава Shipito Объявил О Продаже Бизнеса
19 Oct, 24 -
Перспективы И Пустота
19 Oct, 24 -
Клуб Электроники: Программа Занятий
19 Oct, 24 -
Коллекция Миниатюр Opera Speeddial
19 Oct, 24