在該指令中不是PTR冗餘CALL DWORD PTR [XXXXXXXX]
。如果指令是CALL DWORD [XXXXXXXX]
這也是說,調用位於地址XXXXXXXX的DWORD長度值。在這條指令中PTR不是冗餘的:CALL DWORD PTR [XXXXXXXX]
爲什麼PTR呢?
在該指令中不是PTR冗餘CALL DWORD PTR [XXXXXXXX]
。如果指令是CALL DWORD [XXXXXXXX]
這也是說,調用位於地址XXXXXXXX的DWORD長度值。在這條指令中PTR不是冗餘的:CALL DWORD PTR [XXXXXXXX]
爲什麼PTR呢?
如果我沒有記錯,那麼「PTR」運算符就在那裏,因爲在MASM中,有時您可以擁有一個看起來像常規值但實際上是指針的表達式。
如果兩條語句都適合您,我只能說,將它們組合起來並確保它們都生成相同的字節。他們應該是一樣的,考慮到[xxxxxxxx]
中的「xxxxxxxx」是定義的指針,但是自從我上次用MASM編碼以來已經有一段時間了。 (我傾向於傾向於NASM,對此類事情的疑惑就少得多了。)
用masm的說法,DWORD PTR是一個指針重寫,IOW通常稱爲一個強制轉換。它基本上是指「將地址XXXXXXXX視爲DWORD指針」。
masm實際上鍵入其數據項。所以,如果XXXXXXXX已被確定爲
XXXXXXXX DWORD SomeAddress ; Presumably a function entry point.
然後
CALL XXXXXXXX
是夠了,就會產生,如果由於某種原因,XXXXXXXX是不是定義相同的代碼
CALL DWORD PTR XXXXXXXX
OTOH, as
XXXXXXXX WORD ?
WORD ?
那麼唯一的辦法讓MASM裝配到XXXXXXXX呼叫而不產生MAMS錯誤會
CALL DWORD PTR XXXXXXXX
方括號[]不帶任何東西到板在這種情況下,BTW。對於其他一些彙編程序,它們表示間接性。在上面的例子中,masm並不需要它們。在其他上下文中(基本+索引表達式),它們用於包圍索引寄存器和/或值。
哦,順便說一句:
CALL DWORD [XXXXXXXX]
今天是一個不同尋常的MASM語法(每MASM 6文檔,書籍和他們的例子),大概相當於一些較老的MASM語法兼容津貼。