2009-12-13 107 views

回答

7

bss部分中不能有任何實際的對象。有些彙編程序可能仍允許您切換到.bss段,但您可以在此處執行的操作如下所示:x: . = . + 4

在大多數編譯器這些天,特別是在GNU對於英特爾來說,也不再是.bss指令,讓你暫時切換到BSS和喜歡的東西建立在一杆的BSS符號:.comm sym,size,alignment。這就是爲什麼你大概會得到一個錯誤「bss指令不承認」或類似的東西。

然後你就可以用你可以下載地址:

lea woof, %eax 

movl $woof, %eax 

更新:啊哈,英特爾的語法,而不是英特爾架構。確定:

.intel_syntax noprefix 
    lea esi,fun 
    lea esi,[fun] 
    mov  eax,OFFSET FLAT:fun 
.att_syntax 
    lea  fun, %eax 
    mov  $fun, %eax 
.data 
fun: .long 0x123 

所有lea表單應該生成相同的代碼。

+0

非常感謝,很有啓發。儘管如此,這不是真正的bss或數據部分。我只需要知道如何使用gnu INTEL語法將標籤的地址加載到地址中,而不是AT&T的。 我試過mov eax,woof和mov eax,dword ptr [woof],但兩者都給了我相同的結果。 我想要做一些像movl $ woof,%eax,但使用gnu intel語法的東西。 – jian2587 2009-12-13 21:30:44

+0

感謝DigitalRoss!我也在使用lea,但是我想知道是否可以使用mov來完成。我認爲OFFSET FLAT是這裏的關鍵? – jian2587 2009-12-14 00:16:49

+0

對,有多種尋址模式; MOV可以立即加載,這可能也是一個地址,或者它可以加載地址的內容。通常在Unix上,'movl $ woof,%eax'與'movl woof,%eax',但在英特爾語法中它更加粗俗。無論如何,「是」,lea和mov都可以加載地址。 – DigitalRoss 2009-12-14 00:35:21