Manipulando strings em assembly do processador ARM
Nesta simulação, vamos aprender como manipular strings usando o assembly do processador ARM.
Exemplo
Observe o programa minuscula.s a seguir, criado ler uma string da console, convertê-la para minúsculas e imprimir o resultado:
- Na seção de dados, um único buffer de 128 bytes é reservado (linhas 1 e 2).
- O buffer é lido usando a
syscall reade o tamanho usado é salvo emr4(linhas de 8 até 13). - Antes de entrar no laço principal,
r1recebe o endereço do buffer er5o número de bytes (linhas 16 e 17). No final do laçor5é decrementado (linhas 29). - O critério de parada é feito com
beq(linhas 19 e 20). - Apenas as letras maiúsculas e sem acento são consideradas, então os limites são testados (linhas de 22 a 25). Números e caracteres especiais são ignorados por este filtro.
- O bit 5 do caracter lido é setado com
orr, pois as minúsculas estão exatamente 32 posições adiante na tabela ASCII, e o byte é então gravado de volta na memória (linhas 27) usando o endereço anterior, pois o ponteiro já foi incrementado. - Após a conclusão do laço, as syscalls
writeeexitsão chamadas para imprimir o resultado e finalizar o programa respectivamente.
Agora é a sua vez!
- Usando este programa como exemplo, crie um programa em maiuscula.s para fazer o contrário, ou seja, converter para maiúsculas.
- Crie também um programa em inverte.s para inverter a string sem modificar os caracteres.