Инструкция MOV и копирование значений

Последнее обновление: 10.07.2023

Наиболее распространенной инструкцией является инструкция 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
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850