Arvorezinha – ARM Assembly
Boas noites!
Venho de novo dar continuação à saga da arvorezinha, desta vez em ARM assembly para Linux. Esta foi relativamente simples, mas também depois de se ter feito em tantos tipos de arches já não há muito a diferir :-P
Aqui segue o código:
.equ SYSCALL_BASE, 0x900000 .equ SYSCALL_EXIT, 1 .equ SYSCALL_WRITE, 4 .text .align 2 .globl _start _start: mov r0,#5 @ total = 5 mov r1,#0 @ counter1 = 0 _ciclo1: cmp r0,r1 @ compara c1 e tot beq _exit @ se for igual sai mov r2,#0 @ counter2 = 0 _ciclo2: cmp r2,r1 @ compara c1 e c2 beq _estrela @ se for igual _estrela blt _estrela @ se for menor _estrela stmfd sp!, {r0-r2} @ guarda r0 a r2 na stack adr r1,newline @ le \n bl _print @ imprime ldmfd sp!, {r0-r2} @ le da stack r0 a r2 add r1,r1,#1 @ incrementa c1 b _ciclo1 @ salta _ciclo1 _estrela: stmfd sp!, {r0-r2} @ guarda r0 a r2 na stack adr r1,estrela @ le * bl _print @ imprime ldmfd sp!, {r0-r2} @ le da stack r0 a r2 add r2,r2,#1 @ incrementa c2 b _ciclo2 @ salta _ciclo2 _exit: mov r0,#0 @ resultado e' 0 swi SYSCALL_BASE+SYSCALL_EXIT @ sai _print: mov r0,#1 @ 1 == stadout mov r2,#1 @ tamanho da string swi SYSCALL_BASE+SYSCALL_WRITE @ imprime bx r14 @ return estrela:.string "*" newline:.string "\n"
E aqui a prova-dos-nove:
:~/arvorezinha-arm$ cat /proc/cpuinfo Processor : XScale-IXP42x Family rev 1 (v5b) BogoMIPS : 266.24 Features : swp half thumb fastmult edsp CPU implementer : 0x69 CPU architecture: 5TE CPU variant : 0x0 CPU part : 0x41f CPU revision : 1 Cache type : undefined 5 Cache clean : undefined 5 Cache lockdown : undefined 5 Cache format : Harvard I size : 32768 I assoc : 32 I line length : 32 I sets : 32 D size : 32768 D assoc : 32 D line length : 32 D sets : 32 Hardware : Linksys NSLU2 Revision : 0000 Serial : 0000000000000000
:~/arvorezinha-arm$ make rm -f arvorezinha.o arvorezinha *~ Using fallback suid method as -o arvorezinha.o arvorezinha.arm.s ld -o arvorezinha arvorezinha.o
:~/arvorezinha-arm$ ./arvorezinha * ** *** **** ***** :~/arvorezinha-arm$
Download do projecto: arvorezinha-arm.tar.
Bela arvorezinha embedded!
Isto faila no Android, pelo menos no Milestone com 2.1 (ARM Cortex A8). Fica em loop infinito.