2017-09-05 1 views
0

J'essaie de comprendre un certain bout de code assembleur:Que signifie 2f lors de la connexion à l'étiquette dans l'assembleur?

 ".syntax unified\n" 
"1:\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " CMP %[SystemCoreClock],%[clock16MHz]\n" 
     " BEQ.n 2f\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
     " NOP\n" 
"2:\n" 
     " SUBS %0, %0, #1\n" 
     " BNE.n 1b\n" 
     ".syntax divided\n" 

Quelle est la signification de « f » lorsque la branche de programme à l'étiquette 2 en ligne:

" BEQ.n 2f\n" 

et quelle est la différence quand branche avec "b" dans la ligne

" BNE.n 1b\n" 
+3

Sur quelle machine/architecture/plate-forme est-ce? On dirait MC68k mais je ne suis pas familier avec ces suffixes. – unwind

+5

En guise de supposition, je dirais que "f" signifie vers l'avant, et "b" signifie vers l'arrière. Ceux-ci peuvent également être des indications pour le prédicteur de branche de la CPU. Savoir ce que l'architecture est aiderait. – Retr0id

+2

Si vous utilisez AS, ce sont [Local symbols] (ftp://ftp.gnu.org/old-gnu/Manuals/gas/html_chapter/as_5.html#SEC48). –

Répondre

1

C'est un raccourci paresseux de programmeur AFAIK spécifique au langage d'assemblée de gnu. (Un langage d'assemblage est défini par l'assembleur, le programme qui le lit, il y a beaucoup de bras, MIPS, x86, etc langages d'assemblage)

1: 
2: 
    b 1b 
    b 2b 
    b 1f 
    b 2f 
2: 
    b 1b 
    b 1f 
1: 
    nop 
    nop 

puis assemblez démonter

00000000 <.text>: 
    0: eafffffe b 0 <.text> 
    4: eafffffd b 0 <.text> 
    8: ea000002 b 18 <.text+0x18> 
    c: eaffffff b 10 <.text+0x10> 
    10: eafffffa b 0 <.text> 
    14: eaffffff b 18 <.text+0x18> 
    18: e1a00000 nop   ; (mov r0, r0) 
    1c: e1a00000 nop   ; (mov r0, r0)