Поскольку для вывода на экран числа из регистра в ассемблере придется написать много кода с кучей инструкций, а специальные дебаггеры под архитектуру ARM64 могут быть недоступны, особенно если мы пишем программу на машине с процессором Intel/AMD, то на начальных этапах можно использовать системные вызовы Linux. Так, системная функция Linux с номером 93, которая применяется для вывода из программы возвращает значение из регистра X0/W0. То есть мы можем положить в регистр X0 некоторое значение и выполнить системную функцию Linux 93. Например, определим простейшую программу:
.global _start // адрес входной точки в программу _start: MOV X0, #16 // Загружаем число 16 в регистр X0 MOV X8, #93 // номер функции Linux для выхода из программы - 93 SVC 0 // Вызываем функцию и выходим из программы
В регистр X0 помещается числовой код ошибки. В обычном случае в него помещается число 0, что говорит об нормальном завершении программы. Но в данном случае это не имеет большого значения, и мы помещаем в регистр X0 число 16 и вызываем системную функцию 93 для выхода из программы. Опять же мы можем даже на консоли устройства Android увидеть результат. так, для компиляции приложения откроем терминал/командную строку и командой cd перейдем к папке, где расположен файл hello.s с исходным кодом программы. И для компиляции выполним команду:
aarch64-none-elf-as hello.s -o hello.o
Затем скомпонуем программу в исполняемый файл с помощью линкера aarch64-none-elf-ld
командой:
aarch64-none-elf-ld hello.o -o hello
Рассмотрим получения значения регистра X0 на примере устройства Android. Подключем устройство с Android к компьютеру. С помощью утилиты adb переместим скомпилированный файл hello на устройство под Android с помощью следующей команды
[Путь_к_файлу_adb]/adb push hello /data/local/tmp/hello
То есть в данном случае используем команду push для помещения копии файла hello на смартфон в папку /data/local/tmp/
Далее перейдем к консоли устройства Android с помощью команды:
adb shell
Далее перейдем к папке /data/local/tmp с помощью команды
cd /data/local/tmp
Затем изменим режим файла, чтобы его можно было запустить:
chmod +x hello
и в конце выполним файл hello
./hello
После выполнения программы на консоль смартфона должно быть выведено число из регистра X0. Дополнительно мы можем выполнить команду
echo $?
Она также выводит результат выполненной функции 93
Минусом подобного подхода является то, что мы ограничены числами размером в один байт. Но начальных этапах особенно в окружении, где мы не может проводить отладку с помощью внешних инструментов, такой вариант можно использовать в качестве временного решения.