.global _start @ programa para contar linhas de um texto @ texto é dado em uma cadeia de caracteres terminada por um byte 0 @ número de linhas é armazenado na variável resultado _start: ldr r1,=texto @ carrega endereço inicial da cadeia mov r0, #0 @ inicializa contador de linhas linhas1: ldrb r2, [r1] @ carrega um caractere cmp r2, #0 @ cadeia termina com 0 beq finaliza @ finaliza se terminou cmp r2, #0x0a @ é final de linha? (caractere '\n' em ascii é 0x0a) bne linhas2 @ se não for final de linha desvia addeq r0, #1 @ se sim, adiciona um no contador linhas2: add r1, #1 @ avança apontador da cadeia, cada caractere é um byte b linhas1 @ retorna ao loop finaliza: str r0,resultado @ armazena resultado /* syscall exit(int status) */ mov r0, #0 @ status -> 0 mov r7, #1 @ exit is syscall #1 swi #0x55 @ invoke syscall .align 4 resultado: .skip 4 texto: .ascii "Um teste\nsimples\n\n" .byte 0