2011-05-24 88 views
0

所以我的書上說我可以定義字表所示:尋址存儲器中的數據

表:DW「13,37,99,99」

和我可以通過將索引增加到表中的地址來捕獲表中的值,如下所示:

mov ax,[table + 2];應該給我37

,而是它在斧頭放在0x2c33而不是0x3337

這是因爲在系統結構的差異?也許是因爲這本書是爲386而我正在運行686?

回答

1

0x2C是逗號,而0x33是字符3,它們出現在字符串中的位置2和3處,如預期的那樣。 (我對你的期望有些困惑,因爲你首先說「應該給我37」,後面說「而不是0x3337」。)

0

你已經定義了一個字符串常量,當我懷疑你沒有不是說要。以下:

dw "13,37,99,99" 

將產生以下的輸出:

Offset 00 01 02 03 04 05 06 07 08 09 0A 0B 
      31 33 2C 33 37 2C 39 39 2C 39 39 00 

爲什麼?這是因爲:

  • 31是用於 '1'
  • 33的ASCII碼爲 '3'
  • ASCII碼
  • 2C是用於ASCII碼 ''
  • ...
  • 39是「9」
  • 的ASCII碼
  • NASM還通過把0字節的結束空終止您的字符串(如果你不想讓你的字符串是空終止的使用單引號代替,'13,37,99,99'

考慮到ax包含兩個字節,應該很清楚爲什麼ax包含0x2C33

我懷疑你想沿着這個線路(不包括引號我們使用db指示我們宣佈字節大小的數據,而不是dw聲明字大小的數據)爲更多:

db 13,37,99,99 

這仍然會給你0x6363ax保持兩個字節/轉換爲99,99爲十六進制)。不知道你從哪裏得到0x3337

我建議你自己安裝一個hex editor並且有一個實驗檢查NASM的輸出。