Ассемблер — это общее название языков низкого уровня. Код все все равно придется писать человеку, но он уже гораздо ближе к принципам работы машины. Существует немало его вариантов, однако все они принципиально похожи и большинство из них использует одинаковый синтаксис. Поэтому, мы будем называть их общим словом «Ассемблер».
*https://www.youtube.com/watch?v=_-H271NKYgM
**https://300.ya.ru/v_gQlqrB2b
таймкоды
00:00:00 Введение в ассемблер
- Ассемблер — низкоуровневый язык программирования, упрощающий инструкции для процессора.
- Создан Кейтлин Бут в 1947 году для универсального электронного компьютера.
- Использовался для суперкомпьютеров того времени, таких как IBM 7090.
00:00:39 Современное использование ассемблера
- Ассемблер применяется для прямого доступа к железу и решения низкоуровневых проблем с производительностью.
- Применяется в драйверах устройств, встроенных системах и веб-сборке.
- Каждый язык ассемблера работает только с определённой архитектурой процессора.
00:01:05 Структура программы на ассемблере
- Программа сборки разделена на три части: текстовый раздел, раздел начального символа блока и раздел данных.
- Текстовый раздел содержит логику программы и точку входа «старт».
- Раздел начального символа блока содержит переменные.
- Раздел данных инициализирует константы и данные.
00:02:02 Работа с константами и инструкциями
- Константы объявляются с помощью меток и команд db и ew.
- Каждая строка программы содержит инструкцию с оперантами.
- В язык встроены сотни инструкций.
00:02:12 Работа с регистрами процессора
- Процессор имеет ограниченное количество регистров для быстрого выполнения операций.
- Данные вставляются в регистры с помощью команды mov.
- Для стандартного вывода используется регистр rdi.
- После выполнения кода необходимо обновить регистр для выхода из системы и указать код ошибки.
00:03:03 Компиляция и компоновка
- Ассемблер компилирует код в объектный файл.
- Компоновщик преобразует объектный файл в исполняемый файл.
- Завершение видео с призывом подписаться на канал.
Расшифровка видео
0:00
ассемблер низкоуровневый язык
0:02
программирования предназначенный для
0:04
упрощения инструкции поступающих
0:05
процессор компьютера Другими словами это
0:08
удобочитаемая абстракция поверх
0:10
машинного кода поэтому программистом не
0:12
нужно вручную считать единицей нули
0:14
первый если костемлера был создан
0:16
кейтлинг будто в 1947 году для
0:19
универсального электронного компьютера в
0:21
течение следующего десятилетия он
0:23
превратился во множество различных
0:24
форматов для питания суперкомпьютеров
0:26
того времени таких как IBM 7090 который
0:29
стоил 20 миллионов долларов в
0:31
сегодняшних долларах написание кода и
0:33
сборка были стандартными пока несколько
0:35
лет спустя не появились языки высокого
0:37
уровня такие как фортран Однако
0:39
ассемблер по-прежнему используется
0:41
сегодня для прямого доступа к голому
0:43
железу и для решения низкоуровневых
0:45
проблем с производительностью часто в
0:47
драйверах устройств и встроенных
0:48
системах а также для запуска
0:50
собственного программного обеспечения в
0:52
браузере через веб-сборку Сложность
0:54
заключается в том что каждый язык
0:56
ассемблера работает только с
0:57
определенной архитектурой процессора как
1:00
ARM для Apple Silicon и raspry или x86
1:04
от чипов Intel для начала вам
1:06
понадобится ассемблер такой как нас нет
1:08
Вайт ассемблер свободный ассемблер для
1:10
архитектуры Intel x86 который
1:13
используется для написания
1:14
16-32 и 64-разрядных программ программа
1:18
сборки разделена на три части текстовый
1:21
раздел содержит фактическую логику
1:22
программы по соглашению он содержит
1:24
точку входа с именем Старт где код
1:26
начинает выполняться далее У нас есть
1:28
раздел начального символа блока который
1:30
содержит переменные которые могут
1:32
меняться на протяжении жизненного цикла
1:34
приложения и наконец в разделе данных мы
1:37
можем инициализировать константы или
1:39
данные которые не изменяются чтобы
1:40
объявить константу как строку мы
1:42
начинаем с метки затем используем db
1:45
чтобы определить байт и поместить строку
1:47
World память сам по себе он ничего не
1:50
делает и для стандартного вывода нам
1:52
также понадобится Его длина мы можем
1:54
использовать приравнять для
1:56
преобразования символов константу знак
1:58
доллара вычитает текущую из метки Hello
2:00
обеспечивая длину строки и теперь на эти
2:03
константы можно ссылаться из метки
2:05
начала в основной программе каждая
2:07
строка содержит инструкцию вместе с
2:08
одним или несколькими оперантами А язык
2:10
встроенный сотня инструкций теперь для
2:13
быстрого выполнения операций процессор
2:15
имеет ограниченное количество регистров
2:16
которые представляют собой 64-битные
2:19
блоки памяти встроенные непосредственно
2:21
процессор а не в оперативную память мы
2:24
можем вставлять данные в регистр с
2:25
помощью команды Move предоставляя
2:27
операнты для имени регистра и данные для
2:30
хранения в данном случае используется
2:32
число 1 потому что он соответствует
2:34
системной записи в Linux далее нам нужно
2:37
сообщать системе куда писать и в этом
2:39
случае мы переместим единицу в рекист
2:41
rdi соответствующий стандартному выводу
2:43
в терминале следующий регистр сохраняет
2:45
сообщение справа вместе с его длиной
2:47
теперь выполните код хранящийся в
2:50
процессоре вызвав ядро операционной
2:52
системы Почти готово но мы получим
2:54
ошибку сегментации если попытаемся
2:56
запустить его на этом этапе обновить
2:58
регистр на 60 для меня выхода из системы
3:01
и укажите нулевой код ошибки в случае
3:03
успеха теперь Используйте ассемблер для
3:05
компиляции или сборки вашего кода в
3:07
объектный файл а затем Используйте
3:09
компоновщик для преобразования его в
3:11
окончательной исполняемый файл это был
3:13
язык ассемблера за три минуты если вы
3:16
хотите увидеть больше коротких видео как
3:18
это Ставьте лайк и подписывайтесь на
3:20
канал

