关于使用NASM定义单词的汇编问题

时间:2011-07-03 00:17:31

标签: assembly nasm

这是我的汇编程序的摘录

First: dw 0xaabbccdd

现在我意识到这在逻辑上是不正确的,我希望编译器能够吐出错误(nasm)或者只是创建两个并排的单词。

为什么这不会产生错误,为什么这只会截断双字的前半部分?换句话说,在小端,这印刷在内存中朝向更高的地址0xdd 0xcc。如果我写了First: dw 0xccdd,这是有道理的,但不是我写的。提前致谢: - )。

1 个答案:

答案 0 :(得分:1)

汇编程序是正确的。 字面值为32位长,但转换为 dw 会将值截断为16个最低有效位:0xaabbccdd将被截断为0xccdd。

Little-endian格式表示该值始终首先存储在LSB中,无论该值是16位还是32位。所以......

  • 0xccdd将作为0xdd 0xcc
  • 存储在内存中
  • 0xaabbccdd将作为0xdd 0xcc 0xbb 0xaa
  • 存储在内存中

因此,如果值被截断则没有区别 - 内存中的前两个字节是相同的。

AndréLaszlo指出,NASM会针对这种情况发出警告。