我有這裏的代碼,但我不熟悉的語法。TASM中的`dup(?)`是什麼意思?
STACK16_SIZE = 100h
stack16 db STACK16_SIZE dup (?)
我覺得dup
意味着我們聲明數組類型的變量,因爲這是一個堆棧,但我不知道。那麼dup
在TASM中意味着什麼?
我有這裏的代碼,但我不熟悉的語法。TASM中的`dup(?)`是什麼意思?
STACK16_SIZE = 100h
stack16 db STACK16_SIZE dup (?)
我覺得dup
意味着我們聲明數組類型的變量,因爲這是一個堆棧,但我不知道。那麼dup
在TASM中意味着什麼?
STACK16_SIZE dup (?)
表示將括號內的數據複製STACK16_SIZE
次。這相當於寫入?, ?, ?, ?,
...(100h次)
parens中的數據是「未初始化的數據」。也就是說,內存已分配,但未設置爲加載時的任何特定值。
程序集不提供「類型」數組。如果是這樣,那麼只有在檢查數據時才使用調試器。然而,在這個代碼片段中,stack16
是一個符號,其地址開始的內存塊的字節數爲—,這是違反直覺並且可能是微妙的錯誤的來源。對於CPU堆棧,它應該被定義爲16位字(dw
)或32位字(dd
)。
?
意味着沒有特定的值,未初始化。 DUP
意味着重複。
所以你會得到100h未初始化的字節。
但是什麼類型是stack16?我來自C背景,所以我在用數組的角度思考。或者它就像一個內存地址的佔位符?即TASM中的所有變量都像'void *',並且可以指向任何類型的數據。所以這裏stack16指向100個字節數組的第一個元素。那是對的嗎? – sashoalm 2013-04-11 18:34:30
沒關係,我在http://www.csi.ucd.ie/staff/jcarthy/home/alp/alp5.html – sashoalm 2013-04-11 18:46:07
ARR1 DB 5 DUP找到了一個很好的解釋(2)你認爲這個表達是什麼?數組內的值是什麼? – muco 2017-01-25 08:38:26