GBA ASM - День 21: LDRH и STRH

Дата публикации 10 сен 2006

GBA ASM - День 21: LDRH и STRH — Архив WASM.RU

Повтори?

Сегодня мы рассмотрим две инструкции, о которых в силу некоторых причин я совершенно забыл. Фактически, из-за этого я писал довольно неэффективный код. Эти инструкции ldrh и strh.

Эти инструкции загружают/сохраняют половину слов. Они работают так же как и обычные STR и LDR, не считая того, что используют только нижние 16 битов регистра(ов). Очевидно, что это должно помочь с теми регистрами памяти, которые только 16 битов размером.

Однажды я был на форуме GBADev, чтобы узнать, как решить проблему с одним моим макросом. Он должно был устанавливать номер спрайта в OAM, но в силу неустановленных причин он не работал.

Поэтому один очень умный человек дал мне пример кода, использующий LDRH и STRH, и который работал превосходно. Я совсем забыл о существовании этих двух инструкций. Поэтому, чтобы познакомить вас с этими магическими инструментами перемещающей данные силы, я объясню этот макрос.

Переходим к нему

Вот сам макрос:

Код (Text):
  1.  
  2.     @macro SetNumber sprite, number
  3.         ldr r3,=(OAM+(sprite*8))+6  ; загружаем в r3 адрес номера тайла
  4.         ldr r4,=number  ; затем загружаем номер в нижние биты (как обычно)
  5.         strh r4,[r3]  ; и сохраняем нижние 16 бит куда нужно
  6.     @endm

Я понимаю, что это демонстрирует только инструкцию STRH, чтобы загрузить что-то используйте LDRH следующим образом:

Код (Text):
  1.  
  2.     ldrh r3,[r1]  ; обратите внимание, что мы берём 16 битов по адресу в r1
  3.                   ; и помещаем в r3

Также как и в старые времена, не считая 16-ти бит.

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

Мои благодарности помогшему на форуме GBADev человеку, который напомнил мне об этих инструкциях.

Эти инструкции очень полезны для создания более полезного кода. Используйте их правильно. © Mike H, пер. Aquila


0 1.355
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532