2017-09-05 131 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)