Наиболее распространенной инструкцией является инструкция MOV, которая помещает значение в регистр:
MOV Xd, Xs
В своей самой распространенной форме инструкция принимает два операнда. Первый операнд - Xd представляет регистр, в который надо поместить значение (это может быть, например, 64-разрдяный регистр X0-X30 или 32-разрядный регистр W0-W30). Второй операнд - Xs представляет источник, из которого берется значение. Это может быть другой регистр или какое-то конкретное значение (еще назваемое непосредственным операндом)
Например, поместим значение 22 в регистр X0:
mov X0, #22
Здесь число 22 называет непосредственным операндом (immediate operand). Причем перед числом указывается символ решетки (Хотя этот символ можно опускать). Микропрограмма полностью:
.global _start _start: mov X0, #22 mov X8, #93 // номер функции Linux для выхода из программы svc 0 // вызываем системную функцию
По умолчанию все числа рассматриваются как числа в десятичной системе. Если надо передать шестнадцатеричное значение, то перед числом указываются символы 0x, например:
mov X0, #0xff
Здесь в регистр X0 помещается шестнадцатеричное число 0xFF, которое в десятичной равно 255.
Если надо передать число в двоичной системе, то перед числом указывается префикс 0b, например:
mov X0, #0b11
Здесь в регистр X0 помещается двоичное число 0b11, которое в десятичной равно 3.
Стоит учитывать, что непосредственный операнд должен быть размером не более 2 байт.
Также можно загружать значение из одного регистра в другой:
mov X1, #22 mov X0, X1
В данном случае копируем содержимое регистра X1 в регистр X0. То есть в регистре X0 будет число 22
Если данные помещаются в 32-разрядный регистр W0-W30, то старшие 32 бита соответствующего регистра X0-X30 обнуляются:
mov W0, #5