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.

¿Qué significa “%object” y “@object” en este ensamblador en línea?

El siguiente código está citado de aquí en la línea 453:

#define GEN_ABSOLUTE_SYM_KCONFIG(name, value) \
asm(“.globl\t” #name \
“\n\t.equ\t” #name “,” #value \
“\n\t.type\t” #name “,%object”)

Para algo como esto:

GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_I2C, 1);

Creo que debería expandirse a:

.globl CONFIG_I2C
.equ CONFIG_I2C,1
.type CONFIG_I2C,%object

Puedo entender que el #name y el #value son solo Stringizing.

¿Pero qué significa %object?

El “object” no es un parámetro formal de la macro GEN_ABSOLUTE_SYM_KCONFIG.

¿Por qué está aquí? Y ¿qué significa el “%”? Parece ser específico de ARM.

Y en la línea 465, el %object cambia a @object para x86.

#define GEN_ABSOLUTE_SYM_KCONFIG(name, value) \
asm(“.globl\t” #name \
“\n\t.equ\t” #name “,” #value \
“\n\t.type\t” #name “,@object”)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El atributo %object y @object son en realidad atributos de símbolos específicos de la arquitectura en lenguaje ensamblador.

    En ARM, el atributo %object especifica que el símbolo es un objeto de tipo de datos, pero no lleva ninguna información semántica adicional.

    En x86, el atributo equivalente es @object, lo que significa que el símbolo es un objeto sin restricciones de alineación o tamaño específicos.

    Por lo tanto, el uso de %object o @object en la macro GEN_ABSOLUTE_SYM_KCONFIG depende de la arquitectura a la que se dirige. Se agrega al final de la directiva .type para especificar el atributo del símbolo. Los símbolos ‘% ‘ y @ son solo sintaxis específica de las respectivas arquitecturas.

Comments are closed.