Запись значения в память на GBA с использованием ASM THUMB

Привет, я работаю над простым университетским проектом и создаю игру для GameBoy Advanced.

Я играл с asm, намереваясь создавать свои цветовые палитры в режимах ASM и THUMB.

Я пытался использовать ldr а также str загрузить адрес памяти 0x0500000 (палитра памяти) в регистр и сохранить значение, такое как 0x253F (красный цвет) и сохранить это в адрес палитры. Как это можно сделать? Я тоже пытался использовать MOV, но безуспешно.

Ниже код компилируется, но, похоже, не работает

.THUMB              @ turn on thumb
.ALIGN  2           @ align code correctly for GBA
.GLOBL  test        @ name of function goes here

.THUMB_FUNC         @ we are about to declare a thumb function
test:               @ function start

push { r4-r7, lr }  @ push r4-r7 and link register onto stack. Your function might use these
                @ registers, so we need to preserve the values just in case!
                @ we don't need to worry about r0-r3 as it is assumed they will be regularly messed up anyway


@ the magic happens here!
@ r0-r3 will automatically contain the parameters sent when calling the function.


ldr r5, =#0x5000000
ldr r4, =#0x03DF
str r5, [r4]

pop { r4-r7 }       @ pop first 4 values from stack back into r4-r7, and also
pop { r3 }          @ pop the next value from stack (stored value for lr) into some unused register, e.g. r3 -
                @ we cannot overwrite lr so we have to do it via a normal register
bx r3               @ "branch and exchange" (return) back to C, using the     previous value for lr stored in r3
 @ ==================================

Я действительно ценю любую помощь

0 ответов

Другие вопросы по тегам