#概要
raspberry pi 1 model bで、アセンブラでfizzbuzzやってみた。
#開発環境
raspberry pi 1 model b
raspbian 2016_09_23 jessie lite
#実行
nano fizzbuzz.s
gcc fizzbuzz.s -nostdlib
./a.out
#サンプルコード
.text
.globl _start
_start:
ldr r8, =msg
mov r11, #0
loop:
add r11, r11, #1
mov r9, r11
loop3:
cmp r9, #15
subcs r9, r9, #15
bcs loop3
cmp r9, #0
bne tobu4
mov r7, #4
mov r0, #1
ldr r1, =fizzbuzz
mov r2, #9
svc #0
b tobu3
tobu4:
mov r9, r11
loop4:
cmp r9, #3
subcs r9, r9, #3
bcs loop4
cmp r9, #0
bne tobu5
mov r7, #4
mov r0, #1
ldr r1, =fizz
mov r2, #5
svc #0
b tobu3
tobu5:
mov r9, r11
loop5:
cmp r9, #5
subcs r9, r9, #5
bcs loop5
cmp r9, #0
bne tobu2
mov r7, #4
mov r0, #1
ldr r1, =buzz
mov r2, #5
svc #0
b tobu3
tobu2:
mov r9, r11
mov r12, #0
loop2:
cmp r9, #10
subcs r9, r9, #10
addcs r12, r12, #1
bcs loop2
cmp r12, #0
beq tobu
add r12, #'0'
strb r12, [r8]
bl echo
tobu:
add r9, #'0'
strb r9, [r8]
bl echo
mov r9, #' '
strb r9, [r8]
bl echo
tobu3:
cmp r11, #99
bcc loop
b exit
echo:
mov r7, #4
mov r0, #1
ldr r1, =msg
mov r2, #1
svc #0
mov pc, lr
exit:
mov r7, #1
mov r0, #0
svc #0
.data
msg:
.byte '0'
fizzbuzz:
.ascii "fizzbuzz "
fizz:
.ascii "fizz "
buzz:
.ascii "buzz "
#考察
サブルーチンは、スタックを使わない。
blで、呼び出して、mov pc,lrで戻る。