Начнем с самого понятия — Язык программирования, по факту это некоторый мост между живым человеком и холодной машиной, компьютер понимает только команды в машинном коде, а языки программирования помогают задавать эти команды в понятном для нас формате, конечно, есть люди, которые действительно могут в машинный код, но это реальный треш, господа.

То, что все изучают в школе (плюсы, паскаль, господи прости, VBA) — это языки высокого уровня, они созданы максимально удобными для человека. Одна единственная команда, которую вы задаете, скорее всего означает больше 10 различных операций, например, банальное объявление переменной сообщает машине, что нужно в такое-то к-во ячеек памяти занести такое-то значение, еще и адрес запомнить под это, да еще, чтобы мы с ним дальше работать могли и тд.

В языках же низкого уровня мы работаем напрямую с процессором, его памятью и всей периферией. Это позволяет максимально оптимизировать программу, сделать ее мега-быстрой, но сил на это уйдет пиздецки много, к тому же работать это будет только на определенном процессоре, так как у разных чипов могут быть разные команды для одних и тех же действий.

Например, возьмем простейшую задачу — когда пользователь вводит X, командная строка должна дописать UI, на плюсах это выглядит максимально просто и пишется в 2-3 строчки, но на ассемблере(языке низкого уровня) это выглядит примерно так:

Сначала нужно прописать процедуру «прерывания» — это то, что позволит нам через определенное к-во тактов или каждый такт процессора обращаться к клавиатуре, а точнее к ячейке ее памяти(регистру (да, да, даже у клавиатуры есть память)), проверять не нажата ли клавиша X, при этом нужно помнить, что мы «прерываем» какую-то другую программу, которая сейчас выполнялась, то есть нам нужно еще и полностью запомнить состояние процессора и памяти, которое было до того, как мы вклинились.

Далее мы пишем еще команд 10 для того, чтобы вывести на экран то, что мы хотим, после этого еще нужно вернуть процессор и память в первоначальный вид, чтобы программа, которую мы «прервали» продолжала работать и не было никах сбоев.

Думаю, вы поняли насколько это жестко и запарно, но зато это помогает увеличить скорость, так как мы совершаем только те операции, которые нам нужны и используем для этого меньше ресурсов. Однако нужно понимать, что программирование на низкоуровневых языках нужно только тогда, когда вам действительно важно работать именно с железом, оно требует более фундаментальных знаний в устройстве процессора и в том, как он обрабатывает команды.

Спасибо за то, что вы с нами.
С любовью, Рителлинг favorite