2017-05-18 297 views
2

所以我遇到了一個問題,讓我質疑我對DB(定義字節)和DUP(重複)指令的基本瞭解。我理解他們的方法是:關於8086彙編的DB和DUP指令

  • NUM DB 34將創建一個名爲NUM變量,它會用值34。實際上,NUM = 34分配給它。
  • NUM DB 34 DUP(?)會給我一個34個項目的數組,其中每個項目都未指派。
  • NUM DB 3 DUP(4)會給我叫NUM陣列與3項:4,4,4

這是正確的嗎?

在我的書我遇到:

PRINT_SELECT DB 133 (?) 
      DB 123 (?) 

這只是教科書中的錯誤,否則完全做的這兩行代碼意味着什麼?

+1

他們是不是說明,他們是[彙編指令(http://www.tech-tools.com/cv16_dir.htm)。 –

+0

我的錯誤:)我道歉。 – saremisona

+1

'NUM = 34' ..不完全。數據庫34將定義值爲'34'的單個字節。 'NUM'是標籤,指向這個字節。例如'NUM DB 1,2'將編譯爲兩個字節,並創建指向第一個的符號標籤,它不會執行'NUM = 1,2'(不管是什麼意思)。彙編中沒有變量。在某些情況下,你可以這樣想,但是這種觀點會限制你完全理解那是什麼。而「4,4,4,4」是四項,而不是三項。書中的線條看起來像打字錯誤,它不是有效的語法。如果這本書有例子的資料來源,請檢查這些資料。 – Ped7g

回答

3
PRINT_SELECT DB 133 (?) 
      DB 123 (?) 

在大多數編譯器相當於

PRINT_SELECT DB 133 DUP(?) 
      DB 123 DUP(?) 

您可以使用8086模擬器更好地理解爲8086裝配。
下面顯示了將更詳細地解釋指令的示例代碼。
一旦你使用DB 123 (?),你基本上在內存中保留了123個連續字節(內存位置),併爲它們分配了一個NULL值(?)。

enter image description here