Mais um blog inútil.

Maio 11, 2009

Arvorezinha – ARM Assembly

Filed under: Arvorezinha,Assembly,Coding,Useless — falso @ 0:18

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.

2 comentários a “Arvorezinha – ARM Assembly”

  1. mirage diz:

    Bela arvorezinha embedded!

  2. mirage diz:

    Isto faila no Android, pelo menos no Milestone com 2.1 (ARM Cortex A8). Fica em loop infinito.

Comentar

widgeon
widgeon
widgeon
widgeon