Андрей Ипполитов – Ассемблер ARM64 (страница 7)
•
Числовые константы: Это наиболее простой тип констант, представляющий собой конкретное числовое значение. Числовые константы могут быть заданы в различных системах счисления, таких как десятичная, шестнадцатеричная, двоичная.
•
Адресные константы: Используются для представления адресов памяти. Они часто применяются для указания адресов функций, переменных или меток.
•
ASCII
–строки: Строки, представленные в виде последовательности
ASCII
–символов.
Представление констант
•
Числовые константы
:
•
Десятичные числа записываются как обычно, например: 10.
•
Шестнадцатеричные числа начинаются с префикса
0x,
например: 0
x
10.
•
Двоичные числа можно представить, используя соответствующую двоичную запись, хотя напрямую синтаксис для двоичных чисел не поддерживается, их можно выразить через эквивалентные десятичные или шестнадцатеричные значения.
В ассемблере константы можно использовать в различных контекстах, таких как:
•
Непосредственные значения: 10 использоваться в инструкциях, например,
MOV
X
0, #10 загружает значение 10 в регистр
X
0.
•
Адреса: Константы могут использоваться для задания адресов, к которым будут обращаться инструкции загрузки/сохранения, например
, LDR X0, =my_var
загружает адрес метки
my_var
в регистр
X
0.
Пример использования констант
; Пример использования констант section .data
my_str: .asciz "Hello, World!" ; ASCII-строка
num: .quad 10 ; 64-битная константа
section .text
global _start
_start:
; Использование непосредственного значения
MOV X0, #5 ; X0 = 5
; Использование адресной константы
LDR X1, =num ; X1 = адрес num
; Загрузка значения из памяти
LDR X2, [X1] ; X2 = значение по адресу num = 10
; Использование ASCII-строки
LDR X3, =my_str ; X3 = адрес my_str
RET
Константы в ассемблере являются важным элементом программирования, позволяющим использовать фиксированные значения и адреса в программе. Понимание того, как правильно использовать и представлять константы, необходимо для написания эффективных и корректных программ на языке ассемблера.
Регистры
Регистром называют небольшую, очень быструю ячейку памяти, встроенную в процессор. Он хранит данные, которые процессор использует непосредственно при выполнении инструкций (операнды, адреса, флаги и т.п.).
ARM64 – 64‑битная архитектура, в которой основной набор регистров называется General‑Purpose Registers (GPR). Они обозначаются X0‑X30 (64‑битные) и их 32‑битные части – W0‑W30. Кроме них существуют специальные регистры, используемые системой, стеком и управлением процессором.
X0 (64 бита)
63 … 32 (старшие)
31 … 0 (младшие)
LSR x1, x0, #32
W0 (32 bits)
X0 – 64‑битный общий регистр процессора ARM64 (AArch64). Таким образом, X0 представляет собой 64‑битный контейнер, где младшие 32 бита образуют отдельный регистр W0, а старшие 32 бита доступны только в инструкции LSR x1, x0, #32.