2017-09-05 132 views
0

我想了解的汇编代码的一些片段:2f在分支到汇编器中标记时意味着什么?

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

什么是“F”的含义时,程序转移到行标签2:

" BEQ.n 2f\n" 

和的区别是什么时分行在线

" BNE.n 1b\n" 
+3

什么机/架构/这是平台吗?看起来像MC68k,但我不熟悉这些后缀。 – unwind

+5

作为一个猜测,我会说“f”表示转发,而“b”表示后退。这些也可能提示CPU的分支预测器。了解这个架构将会有所帮助。 – Retr0id

+2

如果您使用的是AS,那么[Local symbols](ftp://ftp.gnu.org/old-gnu/Manuals/gas/html_chapter/as_5.html#SEC48)。 –

回答

1

这是一个懒惰的程序员捷径AFAIK特定于GNU汇编语言。

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

(汇编语言是由汇编器,读取它的程序,有许多臂,MIPS,X86等汇编语言定义的)组装,然后拆卸

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)