在汇编程序中分支到标签时 2f 是什么意思?

What does 2f mean when branching to label in assembler?

我正在尝试理解一些汇编代码片段:

       ".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"

当程序分支到行中的标签 2 时,"f" 是什么意思:

" BEQ.n 2f\n"

行用 "b" 分支有什么区别
" BNE.n 1b\n"

它是 gnu 汇编语言特有的懒惰的程序员快捷方式 AFAIK。 (汇编语言是由assembler定义的,读取它的程序,有很多arm,mips,x86等汇编语言)

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

assemble 然后disassemble

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)