GBA ASM - День 20: Использование деления и квадратного корня — Архив WASM.RU
Деление
Давайте перейдём прямо к делу. Вот прокомментированный код:
Код (Text):
lda r0,=20 ; r0 = 20 lda r1,=5 ; r1 = 5 swi 0x60000 ; r0 = r0/r1 ; Та же: ; r1 = r0 Mod (%) r1 ; r2 = Abs(r0/r1)Вот небольшой исходник, ассемблируйте его и запустите:
Код (Text):
;;--- НАЧАЛО КОДА ---;; ; нам не нужны заголовочные файлы, так как мы не собираемся делать ; вывод чего-либо или использовать какие-либо константы @textarea 0x3000000 g @dcd 0 ; 32-х битная "переменная" g. @endarea lda r0,=20 ; Эти строки lda r1,=5 ; делят 20 swi 0x60000 ; на 5. lda r3,=g ; загружает в r3 адрес g sta r0,[r3] ; сохраняет результат деления (должно быть равно 4 ; в "переменной" g, которая располагается в 0x3000000. infin ; infinite loop b infin ;;--- КОНЕЦ КОДА ---;;Ассемблируйте, а потом запустите в VisualBoy Advance. Откройте просмотровщик памяти и идите в "0x3000000 - IRAM".
Вы должны будете увидеть '4' в первых 32-х битах 0x3000000, так как 20/5=4.
Квадратный корень
Sqrt имеет номер 8. Поэтому, чтобы изменить код выше для работы с ней, сделайте три вещи:
- Сделайте так, чтобы в r0 загружалось 81
- Либо закомментируйте "lda r1, =5", либо оставьте как есть, это не окажет эффекта, так как r1 не используется в качестве аргумента для этой функции.
- Измените "swi 0x60000" на "swi 0x80000".
Протестируйте, используя тот же метод, что я описал ранее.
Обзор этого дня
Использование деление и квадратного корня может очень пригодится, так как соответствующих инструкций нет. © Mike H, пер. Aquila
GBA ASM - День 20: Использование деления и квадратного корня
Дата публикации 10 сен 2006