代码之家  ›  专栏  ›  技术社区  ›  Esato

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

  •  1
  • Esato  · 技术社区  · 7 年前

    我试图理解一些汇编代码片段:

           ".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"
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   old_timer    7 年前

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

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

    组装然后拆卸

    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)