GBA ASM - День 23: Использование AS — Архив WASM.RU

Все статьи

GBA ASM - День 23: Использование AS — Архив WASM.RU

AS?

Похоже, что Goldroad Assembler больше не обновляется, поэтому давайте посмотрим на GNU Assembler.

Базовый синтаксис ассемблера

Насколько мне известно, базовый синтаксис тот же самый, никаких различий в использовании инструкций нет:

	ldr r1,=0x4000000  ; так же, как и раньше

Константы и препроцессор

Одно из основных различий - это константы. Чтобы объявить последнюю, используйте EQU следующим образом:

.equ var, 0x2000000 ; байты 0-3, (32 бита на переменную)
.equ another, 0x2000004 ; байты 4-7

или

.equ REG_DISPCNT, 0x4000000

Вы можете захотеть сконвертировать заголовочные файлы, но есть и другая опция. Вы можете ассемблировать ваши .S-файлы (другое расширение для исходников), если вы сделаете следующее:

	gcc -c test.S
	objcopy -O binary test.o test.gba

Вы сможете использовать #define, поэтому надо будет заменить '@' на '#' и всё! (Обратите внимание, что синтаксис макросов другой, поэтому вам придётся их убрать.)

День 1 с GNU

Вот код, выводящий белую точку, который можно использовать с GCC:

@-- НАЧАЛО КОДА --;
@ комментарии начинаются с @
#define REG_DISPCNT 0x4000000

.text @ the text section
start:
	ldr r1,=0x403 @Режим 3 , BG2 включен
	ldr r2,=REG_DISPCNT
	str r1,[r2]

	ldr r1,=0xFFFF @Белый, (Знаю, что на самом деле это 0x7FFF, но какая разница)
	ldr r2,=0x6000200  @где-то на экране
	str r1,[r2]

infin:
	b infin
@-- КОНЕЦ КОДА --;

Чтобы скомпилировать исходник, поместите test.S на рабочий стол. Я предполагаю, что директория с GNU-ассемблером - C:\devkitadv\:

	set path=C:\devkitadv\bin\
	cd PATH_TO_YOUR_DESKTOP_HERE
	gcc -c test.S
	objcopy -O binary test.o test.gba

Надеюсь, что у вас не будет проблем с компиляцией файла, так как у GNU-программ есть куча заморочек...

Обзор этого дня

Я надеюсь получить ссылку на ассемблерный исходик, использующийся с C/C++.

2002-2013 (c) wasm.ru