GBA ASM - День 21: LDRH и STRH — Архив WASM.RU
Повтори?
Сегодня мы рассмотрим две инструкции, о которых в силу некоторых причин я совершенно забыл. Фактически, из-за этого я писал довольно неэффективный код. Эти инструкции ldrh и strh.
Эти инструкции загружают/сохраняют половину слов. Они работают так же как и обычные STR и LDR, не считая того, что используют только нижние 16 битов регистра(ов). Очевидно, что это должно помочь с теми регистрами памяти, которые только 16 битов размером.
Однажды я был на форуме GBADev, чтобы узнать, как решить проблему с одним моим макросом. Он должно был устанавливать номер спрайта в OAM, но в силу неустановленных причин он не работал.
Поэтому один очень умный человек дал мне пример кода, использующий LDRH и STRH, и который работал превосходно. Я совсем забыл о существовании этих двух инструкций. Поэтому, чтобы познакомить вас с этими магическими инструментами перемещающей данные силы, я объясню этот макрос.
Переходим к нему
Вот сам макрос:
Код (Text):
@macro SetNumber sprite, number ldr r3,=(OAM+(sprite*8))+6 ; загружаем в r3 адрес номера тайла ldr r4,=number ; затем загружаем номер в нижние биты (как обычно) strh r4,[r3] ; и сохраняем нижние 16 бит куда нужно @endmЯ понимаю, что это демонстрирует только инструкцию STRH, чтобы загрузить что-то используйте LDRH следующим образом:
Код (Text):
ldrh r3,[r1] ; обратите внимание, что мы берём 16 битов по адресу в r1 ; и помещаем в r3Также как и в старые времена, не считая 16-ти бит.
Обзор этого дня
Мои благодарности помогшему на форуме GBADev человеку, который напомнил мне об этих инструкциях.
Эти инструкции очень полезны для создания более полезного кода. Используйте их правильно. © Mike H, пер. Aquila
GBA ASM - День 21: LDRH и STRH
Дата публикации 10 сен 2006