Cómo crear una etiqueta única en la definición de macro en AVR gnu assebler

1

En AVR gnu assembler, estoy intentando crear una etiqueta dentro de una definición de macro.

Me gustaría crear una macro, que tenga una etiqueta privada o una etiqueta única en el interior, solo para poder saltar dentro de la definición de la macro y usar múltiples instancias de esta macro.

A continuación se muestra un ejemplo de lo que estoy tratando de hacer.

.macro SetFlag par0
    brid  local_noInt

    cli
    lds   RTMP,FLAGS_M
    sbr   RTMP,(1<<\par0)
    sts   FLAGS_M,RTMP
    sei

    rjmp  local_end
    local_noInt:

    lds   RTMP,FLAGS_M
    sbr   RTMP,(1<<\par0)
    sts   FLAGS_M,RTMP

    local_end:
.endm
    
pregunta Marcin Daw

1 respuesta

1

Puede usar etiquetas numeradas (no es necesario que sean únicas) e instrucciones de salto con el sufijo b o f con el significado de saltar a la etiqueta más cercana con este valor numérico hacia atrás o hacia adelante, respectivamente.

Por lo tanto, para su caso particular, lo siguiente debería funcionar:

.macro SetFlag par0
    brid  1f

    cli
    lds   RTMP,FLAGS_M
    sbr   RTMP,(1<<\par0)
    sts   FLAGS_M,RTMP
    sei

    rjmp  2f

 1: lds   RTMP,FLAGS_M
    sbr   RTMP,(1<<\par0)
    sts   FLAGS_M,RTMP
 2:
.endm

(Código no probado, lo he puesto aquí como una ilustración de cómo usar etiquetas solamente).

Pero tenga en cuenta que la etiqueta al final de la macro sin ninguna instrucción puede causar algunos problemas propios también.

    
respondido por el Martin

Lea otras preguntas en las etiquetas