2011-04-30 20 views
0

我想將下面第二個值的地址加載到寄存器中。x86和解引用標籤

這是我在Unix中的語法代碼:

.data 
Lz7: 
    .long 24 
    .long 34 
    .long 80 
    .long 108 
    .long 101 
    .long 97 
    .long 115 
    .long 101 
    .long 32 
    .long 105 
    .long 110 
     ...etc... 

我想使用此代碼:

movl Lz7, %eax /* %g14 */ 
movl $4, %ebx /* %g15 */ 
addl %ebx /* %g15 */ , %eax /* %g16 */ 

但GCC在運行時抱怨總線錯誤。在GDB中,我可以看到GCC正在將標籤Lz7轉換爲十六進制值0x2068,這看起來太小了。我也嘗試過4(Lz7),但GCC抱怨。我怎樣才能確定程序中的總線錯誤的位置?如果此代碼不正確,我應該寫什麼?

回答

1

你需要使用 '利爾' 指令得到有效地址,像這樣:

leal Lz7, %eax 
addl $4, %eax 
+0

'$ MOVL LZ7,%eax'也適用。 – Nayuki 2012-03-04 20:51:03