Андрей Ипполитов – Ассемблер ARM64 (страница 3)
Поздравляю! Вы только что написали и запустили свою первую программу на ассемблере. Этот простой пример иллюстрирует базовые принципы взаимодействия с операционной системой и работу с системными вызовами на низком уровне. Дальнейшее изучение ассемблера открывает множество возможностей для оптимизации кода и понимания работы компьютеров на более глубоком уровне.
Разберем код построчно:
•
: Эта директива сообщает компоновщику, что метка _
start
является глобальной. В
macOS
точка входа в программу (начало исполнения) обычно называется _
start
.
•
: Эта директива указывает, что далее следует секция кода, где будут располагаться исполняемые инструкции.
•
Это метка. В ассемблере метки используются для обозначения адресов инструкций или данных. К ним можно обращаться для переходов или вызовов
.
•
: Инструкция
mov
(
move
) перемещает значение 1 в регистр
x
0. Регистры
x
0-
x
30 используются для передачи аргументов системным вызовам и функциям. Для системного вызова
write
,
x
0 содержит файловый дескриптор. 1 означает стандартный вывод (
stdout
), куда обычно выводятся данные на консоль.
•
Инструкция
adr
(
address
) загружает в регистр x1 адрес метки
message. x1
будет содержать указатель на строку, которую мы хотим вывести.
•
: Загружаем число 13 в регистр
x
2. Это длина нашей строки “
Hello,
World
!\n”. Символ новой строки
\n
также занимает один байт
.
•
: для выполнения системных вызовов используется регистр
x