3 Май 2026, Вс

МиМ. Cubieboard. Hello, world!

ARM. сборка "привет, мир!"

Этот учебник покажет основы создания и создания простой программы приветствия мира, написанной на языке ассемблера ARM, для этого урока я использую редактор VIM, но любой простой текстовый редактор будет работать, так как сборка имеет очень простой синтаксис, дополнительное программное обеспечение, необходимое для этого учебника, является ассемблером и линкером ARM, а также операционной системой Linux.

Создание нового файла

Создайте новый файл под названием « hello.s», ARM-сборщиков файлов использует расширение .s, затем откройте его в вашем редакторе. мы начинаем с того, что сообщаем ассемблеру, что раздел кода, который мы пишем, содержит код, используя директиву ».text",
следующий мы создаем точку входа для программы, точка входа, где будет начинаться исполнение. имя ярлыка по умолчанию, используемое для идентификации точки входа, является " _ start " выше этого мы добавляем директиву ".global _start", файл должен теперь выглядеть так:

.text        
.global _start
_start:
       

Выход

Файл теперь имеет точку входа и может быть собран, но программа упускает способ закончиться должным образом. поэтому мы будем использовать системный вызов, чтобы сообщить операционной системе, что мы закончили. системные коды вызовов продаются в регистре r7, а номер для SYS_EXIT составляет 1, чтобы перемещать небольшие номера непосредственно в регистры, которые мы используем "mov" Инструкция, здесь как "mov r7, #1", знак фунта перед числом говорит ассемлеру, что это буквальный, числа до 255 могут быть использованы таким образом. следующий хорошо вызов программного прерывания с инструкцией "swi 0". файл должен теперь выглядеть так:

.text        
.global _start
_start:
    mov r7, #1
    swi 0                   

Определение данных

Теперь мы можем определить данные, которые будет использовать программа. данные хранятся в ".data" раздел программы. этот раздел может быть прочитан и записан программой. мы начинаем с создания нового ярлыка для идентификации строки для отображения, давайте назовем это сообщением, но оно может называться что угодно. этот ярлык ссылается на адрес того, где данные хранятся в памяти. затем мы используем директиву ".asciz" чтобы сообщить ассемберитору, что данные являются нулевой конечной строкой.
После этого создать еще один ярлык для хранения длины строки, вот как это делается "len = .-message", ассемблер вычислит размер строки и хранит ее на этой этикетке. Теперь файл должен выглядеть так:

.text            
.global _start
_start:
    mov r7, #1
    swi 0

.data
message:
    .asciz "hello world\n"
len = .-message     
            

Показать текст

Теперь мы отображаем сообщение, которое мы определили. для отображения текста на консоль, используемой системный вызов SYS_WRITE, это номер вызова 4, SYS_WRITE нуждается в некоторых аргументах, таких как, где отображать сообщение, местоположение памяти и длина строки. В register r0 мы говорим ему отобразить сообщение, чтобы выключить, используя код 1, затем мы загружаем в r1 адрес памяти метки, используемый для идентификации строки с помощью нагрузки в инструкцию регистрации "ldr", вот как используется инструкция старшего "ldr r1, =message"Первым аргументом является регистр назначения, а второй - это название этикетки.
Следующим шагом является загрузка этикетки, содержащей длину строки, в r2r2, вот как "ldr r2, =len" затем мы переходим к r7 SYS_WRITE, который является номером 4, последний шаг - вызвать прерывание программного обеспечения с помощью "swi 0" после этого текст будет отображаться. Теперь файл должен выглядеть так:

.text            
.global _start
_start:
    mov r0, #1
    ldr r1, =message
    ldr r2, =len
    mov r7, #4
    swi 0

    mov r7, #1
    swi 0

.data
message:
    .asciz "hello world\n"
len = .-message            




Построение программы

Мы закончили писать программу и можем строить и запускать ее, сначала собрать ее с помощью ассемблера, это создаст объектный файл из сберегательного кода. мы будем использовать ассемблер как, но вам, возможно, придется использовать ARM ассемблерный arm-linux-gnueabihf-as, вот как используется ассемблер:

as hello.s -o hello.o

тогда нам нужно связать объектный файл, который он производит, используя линкера, используя аналогичный синтаксис

ld hello.o -o hello

Это создаст исполняемый файл ELF, которым мы можем управлять. Он будет выведен в файл с именем привет, но если вы не дадите ему выходное имя, он будет выведен на a.out.
Для запуска исполняемого вызова команды ./hello программа теперь завершена.

Оригинал статьи находится здесь:
https://kerseykyle.com/articles/ARM-assembly-hello-world

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять