Adjunto 'contarletrasrep_ex1.s'
Descargar 1 .text
2 .arm
3 .global _start
4 _start:
5 b reset
6 b loop
7 b loop
8 b loop
9 b loop
10 nop
11 b loop
12 b loop
13
14 /* ==============================
15 * CODIGO
16 * ==============================
17 */
18 reset:
19 mov r1,#VECT @ vector origen
20 mov r2,#VEC1 @ vector de byte destino con las letras
21 mov r3,#VEC2 @ vector de halfword destino con las cantidades de cada letra
22 mov r6,#0 @ ultima letra guardada (inicia con 0 para que la comparacion sea negativa y entre a agregar)
23 mov r7,#1 @ contador de letras repetidas (inicia con 1 sin embargo la primera pasada si o si entra a agregar
24 @ donde se vuelve a inicializar con 1, esta linea entonces no es necesaria)
25
26 otro1: ldrb r5,[r1],#1 @ lee la letra de destino
27 cmp r5,#0 @ si es 0 llego a fin de cadena y sale
28 beq final
29 cmp r5,r6 @ comparar con la ultima letra guardada ( la primera pasada r6 es 0 entonces esta comp da diferente si o si)
30 bne agregar @ si son distintas voy a agregar
31 add r7,r7,#1 @ si las letras eran iguales incremento r7 y lo guardo en r3 - 2
32 strh r7,[r3,#-2]
33 continuar:
34 b otro1
35 /* ==========================================================================
36 * agregar: agrega una nueva entrada a los dos vectores destino, guardando en
37 * VEC1 la letra leida y en VEC2 inicializando con 1
38 * si bien se plantea como funcion, no lo es, la devolucion de una función se
39 * debe realizar utilizando el lr no con una instruccion b.
40 * esta funcion guarda la letra e inicializa con 1 el vector VECT2 con una
41 * instruccion de postincremento, esto significa que cuando se quiera acceder a
42 * la cuenta de la ultima letra guardada, se debe restar 2 al valor de r3
43 * ==========================================================================*/
44 agregar:
45 mov r7,#1
46 strb r5,[r2],#1 @ guarda la ultima letra leida
47 strh r7,[r3],#2 @ inicializa cuenta con 1
48 mov r6,r5 @ actualiza r6 con la nueva letra
49 b continuar
50 final:
51 loop: b loop
52
53 /* ==============================
54 * CONTANTES
55 * ==============================
56 */
57 VECT: .asciz "fssddgggrrteeeeeeeew"
58 VEC1: .space(21)
59 VEC2: .space(21)
60 .end
Archivos adjuntos
Para referirse a los adjuntos de una página, usa attachment:nombredelarchivo, como se muestra abajo en la lista de archivos. NO uses la URL del enlace [get], ya que puede cambiar fácilmente y dejar de funcionar.No tienes permisos para adjuntar un archivo a esta página.