(enunciado) Implemente una función/subrutina strlen que se le pase como argumento la dirección de una cadena de caracteres y devuelva el número de caracteres en la cadena. Siga el convenio de paso de parámetros y uso de registros visto en clase.
(solución) El siguiente código RISC-V implementa la funcionalidad pedida.
.text
# strlen(a0 -> "hola") -> 4
strlen: # acc = 0
# i = 0
# while a0[i] != 0:
# acc+=1; i+=1;
# return acc
li t1 0
loop1: lbu t0 0(a0)
beq t0 x0 end1
addi t1 t1 1
addi a0 a0 1
j loop1
end1: mv a0 t1
jr ra
(enunciado) Implemente un programa principal (main:) que use la rutina/función strlen del ejercicio 1 para calcular e imprimir la longitud de las cadenas “hola” y “mundo”. Siga el convenio de paso de parámetros y uso de registros visto en clase.
(solución) El siguiente código RISC-V implementa la funcionalidad pedida.
.data
str1: .string "hola"
str2: .string "mundo"
.text
strlen: li t1 0
loop1: lbu t0 0(a0)
beq t0 x0 end1
addi t1 t1 1
addi a0 a0 1
j loop1
end1: mv a0 t1
jr ra
main:
# push ra
addi sp sp -4
sw ra 0(sp)
# strlen("hola")
la a0 str1
jal ra strlen
# print(a0)
li a7 1
ecall
# strlen("mundo")
la a0 str2
jal ra strlen
# print(a0)
li a7 1
ecall
# pop ra
lw ra 0(sp)
addi sp sp 4
# return
jr ra