¿Cuál es la diferencia entre .fun: y fun: en lenguaje ensamblador?

Resuelto RookieRyan asked hace 7 meses • 1 respuestas
.section .data
msg1:
    .asciz "Hello1: %d\r\n"
msg2:
    .asciz "Hello2: %d\r\n"

.section .text
.global main

main:
    mov r4, #0         
.loop:
    cmp r4, #5          
    bge .endloop         
    ldr r0, =msg1       
    mov r1, r4
    bl printf          
    add r4, r4, #1      
    b .loop            
.endloop:
    mov r7, #1          
    mov r0, #0         
    swi 0              

Mi código ensamblador se ejecuta en Raspberry Pi 4B, ¿por qué cuando lo reemplazo .loop:con loop:y .endloop:con endloop:, todavía se ejecuta normalmente? ¿Cuáles son las diferencias entre .loop:y loop:? Gracias.

RookieRyan avatar Feb 16 '24 13:02 RookieRyan
Aceptado

No hay diferencia, son solo nombres de etiquetas. .es un carácter válido en símbolos asm, incluido el primer carácter.

Pero por convención, .las etiquetas son "locales" para la función. En la sintaxis NASM (un ensamblador x86), en realidad tienen ese alcance, por lo que puedes tener .loopdentro múltiples funciones diferentes.

En GNU Assembler (GAS) como aquí, .loopno es nada especial; sería un error (redefinición de símbolo) tener foo:; .loop:anterior o posterior en el archivo.

.LxyzLas etiquetas que comienzan con un punto y una L mayúscula son especiales (no aparecen en la tabla de símbolos ni .osiquiera para la depuración), pero aún tienen alcance de archivo. https://sourceware.org/binutils/docs/as/Symbol-Names.html Es por eso que GCC usa nombres de etiquetas como .L0para objetivos de rama dentro de funciones (if/else/loops/etc) y nombres como .LC0para constantes en .rodata, e incluso cosas como .Lanchor0ubicaciones que quiere marcar para hacer referencia a otras cosas relativas.

Para etiquetas locales reales en GAS que puede definir más de una vez, use números simples como 1:y consúltelos con 1bpara retroceder al más cercano 1en esa dirección, 1fpara el más cercano 1:en la dirección de avance. Me gusta 1: bhi 1bes un bucle infinito o no dependiendo de las banderas de acarreo y cero.

Peter Cordes avatar Feb 16 '2024 07:02 Peter Cordes