Bare metal «Hello, World!» на ассемблере ARM

Для тех, кто хотел бы сделать первый шаг и, возможно, немного поэкспериментировать, приведу последовательность действий, которые необходимо произвести, чтобы запустить простейшую программу на ассемблере на голом железе под эмулятором. Здесь я буду описывать процесс для Windows.

Итак, для начала скачайте и установить эмулятор QEMU. Последнюю сборку под Windows можно скачать отсюда: https://qemu.weilnetz.de/w64/

Также нам потребуется кросс-ассемблер FASMARM для Windows. Скачать его можно отсюда: https://arm.flatassembler.net/

Далее скопируйте текст программы в блокнот и сохраните в файл HelloWorld.s:

org 0x6001000
    mov r0, 0x9000  ; Загружаем в регистр r0 адрес консоли 0x10009000, вначале младшую половину
    movt r0, 0x1000    ; а потом старшую половину
    adr r1,text    ; Загружаем в регистр r1 адрес начала текста
    mov r2,0    ; Обнуляем счётчик в регистре r2
loop:
    ldrb r3,[r1,r2] ; Загружаем в регистр r3 код следующего символа надписи
    str r3,[r0]    ; Выводим в консоль код символа из регистра r3
    add r2,1    ; Увеличиваем счётчик на единицу
    cmp r3,10    ; Сравниваем код символа с кодом перевода строки
    bne loop    ; Переходим к следующему символу, если код символа не равен коду перевода
finish:
    b finish    ; В конце программы зацикливаем строку саму на себя
text:
    db "Hello, World!", 10

Сам я лично вместо стандартного блокнота пользуюсь Notepad++ и подсветкой синтаксиса, которую сделал похожей на привычную мне среду разработки на Python — PyCharm:

Распакуйте архив с ассемблером. Оттуда понадобится только исполняемый (.exe) файл. И положите рядом с ним ваш HelloWorld.s. Теперь всё готово для компиляции! Открываем консоль, переходим в папку с ассемблером и нашим файлом, и подаём команду:

fasmarm HelloWorld.s

На выходе получаем файл HelloWorld.bin объёмом 54 байта. Теперь осталось только его запустить под эмулятором. Для запуска подаём такую команду в консоли:

"c:\Program Files\qemu\qemu-system-arm.exe" -M vexpress-a9 -serial stdio -kernel HelloWorld.bin

И наслаждаемся результатом:

Появились вопросы? Задавайте!

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Защита от спама * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.