4
我有這樣的代碼:GNU彙編:獲取標籤/變量的地址[Intel語法]
.bss
woof: .long 0
.text
bleh:
...some op codes here.
現在我想緯的地址移到EAX。什麼是英特爾語法代碼在這裏做到這一點?將bleh的地址轉換成ebx也是一樣。
非常感謝您的幫助!
我有這樣的代碼:GNU彙編:獲取標籤/變量的地址[Intel語法]
.bss
woof: .long 0
.text
bleh:
...some op codes here.
現在我想緯的地址移到EAX。什麼是英特爾語法代碼在這裏做到這一點?將bleh的地址轉換成ebx也是一樣。
非常感謝您的幫助!
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
表單應該生成相同的代碼。
非常感謝,很有啓發。儘管如此,這不是真正的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
感謝DigitalRoss!我也在使用lea,但是我想知道是否可以使用mov來完成。我認爲OFFSET FLAT是這裏的關鍵? – jian2587 2009-12-14 00:16:49
對,有多種尋址模式; MOV可以立即加載,這可能也是一個地址,或者它可以加載地址的內容。通常在Unix上,'movl $ woof,%eax'與'movl woof,%eax',但在英特爾語法中它更加粗俗。無論如何,「是」,lea和mov都可以加載地址。 – DigitalRoss 2009-12-14 00:35:21