Labs

Guía 9

Buscar titulo

Guia 9 Soluciones

Indexación sin actualizar

/* desripción: programa para mostrar el manejo de arreglos 
Modo de indexacion sin actualizacion
*/
        .data
a:              .skip 40 // Reservar 40 bytes para un arreglo de 10 enteros 
fmt:          .asciz     "%d\n"

                 .text 
                 .global main
main:
         PUSH    {lr}
         LDR      R4, =a      //Dirrección base del arreglo 
         MOV     R5,#0      // inicializar indice del arreglo 

ciclo: 
        CMP R5,#10        // Comparar el indice con el limite (10 enteros)
        BEQ  finCiclo       //Si el contador del indice ya llego a 10, _salir
        @ ADD R6, R4,R5, LSL #2    
        /*R6=R4(R5*4)
                                                     calcular la dirreción del elemento del arreglo a partir de la 
                                                     y el indice
                                                     */
        MUL R7,R5,R5                         //Calcular el cuadrado del numero 
        //STR  R7,[R6]                             //Guarda el valor en la dirrección calculada 
        STR R7, [R4,+R5, LSL #2]
                                                  // en la linea 19
        ADD  R5,#1                             // Aumenta el contador del indice 
        B       ciclo                                // Regresa al inicio del ciclo
finCiclo:
            MOV R5,#0
cicloImpresion: 
            LDR   R0,=fmt
            CMP R5,#10
            BEQ finCicloImpresion
            @ ADD R6,R4,R5,LSL #2              //Calcula la dirrección del elemento del
                                                                 // del arreglo, tal como se hizo en la linea 19
            @ LDR R1,[R6]                               // Carga el valor del elemento del arreglo
            LDR R1, [R4, +R5, LSL #2]
            BL printf 
            ADD R5, #1                                 // aumenta el contador del indice    
            B   cicloImpresion                       // volver al inicio del ciclo
 finCicloImpresion:
              POP {pc}

fin:          
              MOV R7,#1 
              SWI 0

Indexación con actualización

/* desripción: programa para mostrar el manejo de arreglos 
Modo de indexacion con actualizacion
*/
        .data
a:              .skip 40 // Reservar 40 bytes para un arreglo de 10 enteros 
fmt:          .asciz     "%d\n"

                 .text 
                 .global main
main:
         PUSH    {lr}
         LDR      R4, =a      //Dirrección base del arreglo 
         MOV     R5,#0      // inicializar indice del arreglo 

ciclo: 
        CMP R5,#10        // Comparar el indice con el limite (10 enteros)
        BEQ  finCiclo       //Si el contador del indice ya llego a 10, _salir
        @ ADD R6, R4,R5, LSL #2    
        /*R6=R4(R5*4)
                                                     calcular la dirreción del elemento del arreglo a partir de la 
                                                     y el indice
                                                     */
        MUL R7,R5,R5                         //Calcular el cuadrado del numero 
        //STR  R7,[R6]                             //Guarda el valor en la dirrección calculada 
        @ STR R7, [R4,+R5, LSL #2]
        STR R7, [R4], #+4
        ADD  R5,#1                             // Aumenta el contador del indice 
        B       ciclo                                // Regresa al inicio del ciclo
finCiclo:
        MOV R5,#0
        LDR R4, =a                                          // en la linea 19
cicloImpresion: 
            LDR   R0,=fmt
            CMP R5,#10
            BEQ finCicloImpresion
            @ ADD R6,R4,R5,LSL #2              //Calcula la dirrección del elemento del
                                                                 // del arreglo, tal como se hizo en la linea 19
            @ LDR R1,[R6]                               // Carga el valor del elemento del arreglo
            @ LDR R1, [R4, +R5, LSL #2]
            LDR R1, [R4], #+4
            BL printf 
            ADD R5, #1                                 // aumenta el contador del indice    
            B   cicloImpresion                       // volver al inicio del ciclo
 finCicloImpresion:
              POP {pc}

fin:          
              MOV R7,#1 
              SWI 0

Manejo de arreglos

/* desripción: programa para mostrar el manejo de arreglos 
*/
        .data
a:              .skip 40 // Reservar 40 bytes para un arreglo de 10 enteros 
fmt:          .asciz     "%d\n"

                 .text 
                 .global main
main:
         PUSH    {lr}
         LDR      R4, =a      //Dirrección base del arreglo 
         MOV     R5,#0      // inicializar indice del arreglo 

ciclo: 
        CMP R5,#10        // Comparar el indice con el limite (10 enteros)
        BEQ  finCiclo       //Si el contador del indice ya llego a 10, _salir
        ADD R6, R4,R5, LSL #2    /*R6=R4(R5*4)
                                                     calcular la dirreción del elemento del arreglo a partir de la 
                                                     y el indice
                                                     */
        MUL R7,R5,R5                         //Calcular el cuadrado del numero 
        STR  R7,[R6]                             //Guarda el valor en la dirrección calculada 
                                                   // en la linea 19
        ADD  R5,#1                             // Aumenta el contador del indice 
        B       ciclo                                // Regresa al inicio del ciclo
finCiclo:
            MOV R5,#0
cicloImpresion: 
            LDR   R0,=fmt
            CMP R5,#10
            BEQ finCicloImpresion
            ADD R6,R4,R5,LSL #2              //Calcula la dirrección del elemento del
                                                                 // del arreglo, tal como se hizo en la linea 19
            LDR R1,[R6]                               // Carga el valor del elemento del arreglo
            BL printf 
            ADD R5, #1                                 // aumenta el contador del indice    
            B   cicloImpresion                       // volver al inicio del ciclo
 finCicloImpresion:
              POP {pc}

fin:          
              MOV R7,#1 
              SWI 0

Copyright © 2024. Todos los derechos reservados.