所以我的书说我可以定义一个像这样的单词表:
表:dw“13,37,99,99”
并且我可以通过将索引增加到表的地址来从表中抢夺值,如下所示:
mov ax,[table + 2];应该给我37
但是它将0x2c33放在ax而不是0x3337
这是因为系统架构的差异?也许是因为这本书适用于386,我正在运行686?
答案 0 :(得分:1)
0x2C是逗号,
,0x33是字符3
,它们出现在字符串中的第2和第3位,正如预期的那样。 (我对你的期望感到有些困惑,因为你先说“应该给我37”,然后说“而不是0x3337”。)
答案 1 :(得分: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
为什么呢?这是因为:
'13,37,99,99'
)考虑到ax
包含两个字节,并且应该非常清楚ax
包含0x2C33
的原因。
我怀疑你想要的更多是这一点(没有引号和我们使用db
表示我们正在声明字节大小的数据,而不是dw
声明字大小的数据):
db 13,37,99,99
这仍然会给你0x6363
(ax
保存两个字节/转换99,99到十六进制)。不知道你从哪里获得0x3337
。
我建议您自己安装一个hex editor并进行实验,检查NASM的输出。