这是我的汇编程序的摘录
First: dw 0xaabbccdd
现在我意识到这在逻辑上是不正确的,我希望编译器能够吐出错误(nasm)或者只是创建两个并排的单词。
为什么这不会产生错误,为什么这只会截断双字的前半部分?换句话说,在小端,这印刷在内存中朝向更高的地址0xdd 0xcc
。如果我写了First: dw 0xccdd
,这是有道理的,但不是我写的。提前致谢: - )。
答案 0 :(得分:1)
汇编程序是正确的。 字面值为32位长,但转换为 dw 会将值截断为16个最低有效位:0xaabbccdd将被截断为0xccdd。
Little-endian格式表示该值始终首先存储在LSB中,无论该值是16位还是32位。所以......
0xccdd
将作为0xdd 0xcc
0xaabbccdd
将作为0xdd 0xcc 0xbb 0xaa
因此,如果值被截断则没有区别 - 内存中的前两个字节是相同的。
AndréLaszlo指出,NASM会针对这种情况发出警告。