2011-07-03 40 views
0

这节录从我的汇编程序大会问题关于使用NASM

First: dw 0xaabbccdd 

现在我意识到,这在逻辑上是不正确的,我希望编译器定义的话要么吐出一个错误(NASM)或只是创造两个并排的话。

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

+0

有趣的是,我在文档中找不到任何关于此的内容。 –

+1

这是一个非问题,因为NASM会向您显示以下警告: >警告:字数据超出范围 –

回答

1

汇编器是正确的。 文字值为32位长,但转换为dw将该值截断为16位最不重要的位:0xaabbccdd将被截断为0xccdd。

Little-endian格式意味着无论值是16位还是32位,该值总是先存储在LSB中。所以......

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

因此,它没有什么区别,如果值被截断 - 前两个字节在内存中是一样的。

正如AndréLaszlo指出的那样,NASM会为这种情况发出警告。