2011-05-24 56 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的输出。