2010-12-05 97 views
1

我需要設置某個標籤地址/偏移的最高位。NASM - 用位標記擴展標籤

我想:

test.nasm:

BITS 32 

dw mylabel | 0x8000 

mylabel: 
dd 0 

但試圖組裝這個當我:

nasm -f bin test.nasm 
test.nasm:3: error: `|' operator may only be applied to scalar values 

爲什麼它不看mylabel作爲標值?我認爲標籤只是由彙編程序替換爲它們的地址(標量值)。

如果有問題,我正在使用nasm v 2.09.04。

在此先感謝您的幫助。

編輯: 我已經能夠使用+代替|。看起來好像按位運算符不適用於標籤。你認爲,這是故意還是錯誤?

回答

1

標籤是可重定位的值 - 其值由鏈接器/裝載器修改。兩個標籤(在同一部分)之間的差異是一個標量值,Nasm將與它一起工作。

dd(mylabel - $$)| 0x80000000

我修正了一個誤解,即32位代碼中的標籤也是16位。

這是爲了達到什麼目的?

最佳, 弗蘭克

+0

dw應該存儲從文件開始處的mylabel標籤的偏移量(作爲16位值),但它必須用某個標誌進行擴展。我正在手動編寫win exe(PE)文件/映像的.reloc部分。 – masterxilo 2010-12-07 14:49:35