Manipulando strings em assembly do RISC-V
Nesta simulação, vamos aprender como manipular strings usando o assembly do RISC-V.
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 ems0(linhas de 8 até 13). - Antes de entrar no laço principal,
t1recebe o endereço do buffer et0o número de bytes (linhas 16 e 17). No final do laçot1é incrementado et0decrementado (linhas 28 e 29). - O critério de parada é feito com
beqz(linha 19). - Apenas as letras maiúsculas e sem acento são consideradas, então os limites são testados (linhas de 21 a 24). Números e caracteres especiais são ignorados por este filtro.
- O bit 5 do caracter lido é setado com
ori, 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 26). - 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.