3
我正在使用Visual Studio 2017,並且想要測試$符號。使用下面的代碼,我期望var1和var2的值是不同的,但它們是相同的。
.data
var1 DWORD $
var3 BYTE 16 dup (0FFh)
var2 DWORD $
這是一個什麼樣VS顯示內存
的圖像VAR1值對我來說很有意義,但是如果$應該顯示下一個內存地址,爲什麼VAR2顯示與var1相同的?它不應該顯示004068A4嗎?
在NASM中,'section .data' /'var1 dd $'/ ... /'var2 dd $'* does *彙編到包含自己地址的每個雙字。 NASM和MASM還有另一個「有趣」的區別。 (NASM的行爲可以讓你做'msglen equ $ - msg'這樣的東西,在MASM中,你需要在字符串的末尾加上一個標籤,並使用'msg_end - msg'?)我認爲NASM行爲更有用並沒有那麼令人驚訝,除非我缺少一個用例。 –
根據我的理解,使用等號指令(=)是可行的,因爲$最終放置在.code段而不是.data段。然而,我不明白'ListSize =($ - list)'是如何工作的,假設list只是一個字節數組的標識符。難道這與減去一些.data偏移量的.code偏移量是一回事嗎?在這種情況下列表的值不是指數組的第一個字節? –
將** $ **視爲重載操作符。當它自己使用時,彙編程序更喜歡將它視爲代碼段中的位置計數器,但在像'$ - list'這樣的表達式中,彙編器知道* list *標籤屬於哪個段,因此能夠計算無論如何,這是一個相對值。 –