GBA ASM - День 20: Использование деления и квадратного корня

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

GBA ASM - День 20: Использование деления и квадратного корня — Архив WASM.RU

Деление

Давайте перейдём прямо к делу. Вот прокомментированный код:

Код (Text):
  1.  
  2.     lda r0,=20  ; r0 = 20
  3.     lda r1,=5   ; r1 = 5
  4.     swi 0x60000  ; r0 = r0/r1
  5.              ; Та же:
  6.              ; r1 = r0 Mod (%) r1
  7.              ; r2 = Abs(r0/r1)

Вот небольшой исходник, ассемблируйте его и запустите:

Код (Text):
  1.  
  2. ;;--- НАЧАЛО КОДА ---;;
  3.  
  4. ; нам не нужны заголовочные файлы, так как мы не собираемся делать
  5. ; вывод чего-либо или использовать какие-либо константы
  6.  
  7. @textarea 0x3000000
  8. g @dcd 0  ; 32-х битная "переменная" g.
  9. @endarea
  10.  
  11. lda r0,=20  ; Эти строки
  12. lda r1,=5   ; делят 20
  13. swi 0x60000 ; на 5.
  14.  
  15. lda r3,=g  ; загружает в r3 адрес g
  16. sta r0,[r3] ; сохраняет результат деления (должно быть равно 4
  17.        ; в "переменной" g, которая располагается в 0x3000000.
  18.  
  19. infin  ; infinite loop
  20. b infin
  21.  
  22. ;;--- КОНЕЦ КОДА ---;;

Ассемблируйте, а потом запустите в VisualBoy Advance. Откройте просмотровщик памяти и идите в "0x3000000 - IRAM".

Вы должны будете увидеть '4' в первых 32-х битах 0x3000000, так как 20/5=4.

Квадратный корень

Sqrt имеет номер 8. Поэтому, чтобы изменить код выше для работы с ней, сделайте три вещи:

  1. Сделайте так, чтобы в r0 загружалось 81
  2. Либо закомментируйте "lda r1, =5", либо оставьте как есть, это не окажет эффекта, так как r1 не используется в качестве аргумента для этой функции.
  3. Измените "swi 0x60000" на "swi 0x80000".

Протестируйте, используя тот же метод, что я описал ранее.

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

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


0 1.115
archive

archive
New Member

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