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

Все статьи

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

Деление

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

	lda r0,=20  ; r0 = 20
	lda r1,=5   ; r1 = 5
	swi 0x60000  ; r0 = r0/r1
		     ; Та же:
		     ; r1 = r0 Mod (%) r1
		     ; r2 = Abs(r0/r1)

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

;;--- НАЧАЛО КОДА ---;;

; нам не нужны заголовочные файлы, так как мы не собираемся делать 
; вывод чего-либо или использовать какие-либо константы

@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. Поэтому, чтобы изменить код выше для работы с ней, сделайте три вещи:

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

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

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

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

2002-2013 (c) wasm.ru