es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema LDRB y LDR en la programación en ensamblador del ARM M0+

ArraySize EQU 0X0A
        AREA array, DATA, LECTUREESCRITURA
        ALIGN
y_array SPACE ArraySize

        AREA sort, CODE, SOLO_LECTURA
        ENTRADA
        THUMB
        ALIGN
        EXPORTAR __main
 __main PROC
        B __sort
  __ret

        ALIGN
        FIN

 __sort PROC
        MOVS R0, #0
        LDR R1, =x_array
        LDR R3, =y_array
        CMP R5, #ArraySize
        BGE __ret
  __mem LDRB R2, [R1,R0]
        STRB R2, [R3,R0]
        ADDS R0, R0, #1
        B __mem
        FIN

  x_array DCB 12,65,43,37,89,94,37,56,33,14
        ACABAR

Soy nuevo en ensamblador. El código ensamblador para ARM M0+ de arriba se utiliza para copiar un array. Tengo algunas preguntas sobre eso:

  1. Cuando utilizo LDR R2, [R1,R0] en lugar de LDRB R2, [R1,R0] se produce un error que no pude definir. Creo que la razón es la definición de x_array como DCB, pero no estoy seguro de eso.

  2. Cuando utilizo la instrucción ALIGN en el código, ¿cuál es el propósito claro de la instrucción?

  3. ¿Hay alguna instrucción RET para el ensamblador ARM M0+?

Y por favor, avíseme si hay algún error que note en el código. ¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai
    1. La razón por la que usar LDR R2, [R1,R0] en lugar de LDRB R2, [R1,R0] causa un error es debido a que DCB define el arreglo como una secuencia de bytes, no como una secuencia de palabras de 32 bits. Por lo tanto, cada elemento del arreglo debe ser cargado como un valor de 8 bits utilizando LDRB.

    2. La declaración ALIGN se utiliza para alinear el inicio de una sección o un bloque de código a una dirección de memoria específica. En el fragmento de código anterior, se utiliza para alinear el inicio de la sección sort en un límite de 4 bytes, lo cual puede mejorar el rendimiento cuando el código se carga en la memoria.

    3. No existe la instrucción RET en el ensamblador ARM M0+. En su lugar, la dirección de retorno se almacena en el registro de enlace LR, y se utiliza la instrucción BX LR para retornar de un procedimiento. En el código anterior, la etiqueta __ret no se utiliza y puede ser eliminada.

Comments are closed.